从多个工作表中选择特定变量,并以逗号分隔的文本文件写入R中?

问题描述

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

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

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

解决方法

我尝试了另一种方式(我认为我可以避免使用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))