问题描述
我创建了myData.xlsx
工作表。我想为PCP
的每个MinT
提取MaxT
,variable (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))