首页 > 解决方案 > 从多个工作表中选择特定变量并在 R 中以逗号分隔的文本文件形式写入?

问题描述

我创建了myData.xlsx工作表。我想为每个提取,和PCP并将MinT其写入文件。文件的名称应该是我们要为其提取数据的变量(即 G1.txt、G2.txt...等)。MaxTvariable (i.e., G1,G2..etc)myData.xlsxcomma separated value texttext

    library(tidyverse)
    library(xlsx)
    
set.seed(123)

    MaxT <- data.frame(G1= runif(1095,-5,20), G2= runif(1095,-4,18),G3= runif(1095,-5,15))
    MinT <- data.frame(G1= runif(1095,-10,10), G2= runif(1095,-8,10),G3= runif(1095,-15,10))
    PCP <- data.frame(G1= runif(1095,1,5), G2= runif(1095,2,10),G3= runif(1095,0,10))
    
    write.xlsx(MaxT, file="myData.xlsx", sheetName="MaxT", row.names=FALSE)
    write.xlsx(MinT, file="myData.xlsx", sheetName="MinT", append=TRUE, row.names=FALSE)
    write.xlsx(PCP, file="myData.xlsx", sheetName="PCP", append=TRUE, row.names=FALSE)

例如,输出G1.txt应该是这样的

PCP,MinT,MaxT
0.17,-10.82,-4.71
0.21,-11.87,-2.02
0.14,-4.42,0.04
0.21,-6.9,-0.3
0.13,-8.28,-1.68
0.19,-12.5,-8.53
0.29,-11.29,-8.19
0.3,-12.87,-7.05
0.07,-11.53,-5.14

标签: rexceldataframetidyversewrite.table

解决方案


我尝试了一种不同的方式(我认为我可以避免 for 循环)。这个想法是用你的所有数据制作一个大数据框,然后旋转它,嵌套它,最后写入 csv 文件。不确定它是否更好。

bind_rows(list(PCP = PCP, MaxT = MaxT, MinT = MinT), .id = "id") %>% 
pivot_longer(!id, names_to = "names", values_to = "values") %>% 
group_by(id, names) %>% 
nest() %>%
unnest_wider(data) %>% 
pivot_wider(names_from = id, values_from = values) %>%
unnest(cols = c(PCP, MaxT, MinT), names_repair = "universal") %>% 
nest() %>% 
by_row(~write.csv(.$data, file = paste(.$names, ".csv", sep = ""), row.names=FALSE, quote=FALSE))

推荐阅读