如何在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 个表中的数据:

我有这个循环,但我无法获取 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)

这将根据 var1var2.

的值将 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")是构建文件目录。