如何在R中的循环内创建循环
How to create a loop inside a loop in R
我是 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 个表中的数据:
- "A" 和 1
的结果
- "A" 和 2
的结果
- "B" 和 1
的结果
- "B" 和 2
的结果
我有这个循环,但我无法获取 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))
}
}
扩展@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 写入您当前的工作目录,名称为 "table_A_1.csv" 等
我们可以将dataframe按照两列拆分成多个dataframe,存储在一个list中。
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")
是构建文件目录。
我是 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 个表中的数据:
- "A" 和 1 的结果
- "A" 和 2 的结果
- "B" 和 1 的结果
- "B" 和 2 的结果
我有这个循环,但我无法获取 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))
}
}
扩展@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
.
我们可以将dataframe按照两列拆分成多个dataframe,存储在一个list中。
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")
是构建文件目录。