我是R的新手,我在关系循环中需要一些帮助。我需要从一个数据集中产生大量的表,我认为循环中的循环将解决问题,但是我在获得正确的结果时遇到了问题。
假设我有以下数据集:
var1 <- c("A","A","A","A","B","B","B","B")
var2 <- c(1,2,1,2,1,2,1,2)
df <- data.frame(var1,var2)
我想在4个表格中提取数据:
我有这个循环,但我无法得到4个表。任何人都可以帮忙!
for (i in df$var1) {
dummy<- df%>%filter(var1 == i)
for (j in dummy$var2) {
nTab <- paste0("tab_", j, sep ="")
assign(nTab, dummy%>%filter (var2 == j))
}
}
答案 0 :(得分:1)
扩展@Gregor的评论,以及这里的问题,
Save all data frames in list to separate .csv files,
您可以使用Map()
和split()
函数将新创建的数据框输出到各个csv文件:
代码:
s=split(df, f = paste(df$var1, df$var2, sep = "_"))
Map(write.csv,s, paste0("table_",names(s),".csv"),row.names=F)
会根据var1
和var2
的值将csv写入您当前的工作目录,名称为&#34; table_A_1.csv&#34;等。
答案 1 :(得分:0)
我们可以根据两列将数据帧拆分为多个数据帧,并将它们存储在列表中。
df_list <- split(df, f = list(df$var1, df$var2))
df_list
# $A.1
# var1 var2
# 1 A 1
# 3 A 1
#
# $B.1
# var1 var2
# 5 B 1
# 7 B 1
#
# $A.2
# var1 var2
# 2 A 2
# 4 A 2
#
# $B.2
# var1 var2
# 6 B 2
# 8 B 2
要在列表中保存数据框,我们可以进一步使用lapply
函数。
lapply(names(df_list), function(x) write.csv(df_list[[x]], paste0(x, ".csv"), row.names = FALSE))
df_list[[x]]
是基于名称访问单个数据帧的方式。 paste0(x, ".csv")
是构建文件目录。