Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中的循环内创建循环_R_Loops_Nested Loops - Fatal编程技术网

如何在R中的循环内创建循环

如何在R中的循环内创建循环,r,loops,nested-loops,R,Loops,Nested Loops,我是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) var1扩展@Gregor的评论和这里的问题 , 您可以使用Map()和split()函数将新创建的数据帧输出到单

我是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)

var1扩展@Gregor的评论和这里的问题

,

您可以使用
Map()
split()
函数将新创建的数据帧输出到单个csv文件:

代码:


它会将csv写入您当前的工作目录,名称为“table_A_1.csv”,等等,基于
var1
var2
的值,我们可以基于两列将数据框拆分为多个数据框,并将它们存储在列表中

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

其中
df_list[[x]]
是基于名称访问单个数据帧的方法
paste0(x,“.csv”)
用于构建文件目录。

您正在寻找
xtabs(~var1+var2,data=df)
?循环是一种不好的方法-看起来您想要
split(df,f=paste(df$var1,df$var2,sep=“)
。我需要创建几个数据帧以导出到csv。var1和var2各一个。谢谢Gregor和jogo!谢谢安德鲁·海恩斯!我已经使用了这个解决方案。为布鲁诺干杯,如果它解决了你的问题,请接受它作为答案,这样其他人就可以看到这个问题有答案了!:)@布鲁诺瓜里塔我很高兴它能帮上忙。如果可能的话,接受我的答案或安德鲁·海恩斯的答案取决于你认为哪一个对你最有帮助或有用。它会让其他人知道这个问题有解决办法。
s=split(df, f = paste(df$var1, df$var2, sep = "_"))
Map(write.csv,s, paste0("table_",names(s),".csv"),row.names=F)
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(names(df_list), function(x) write.csv(df_list[[x]], paste0(x, ".csv"), row.names = FALSE))