我只有一个数据框,想要按行分割数据框,将几个新数据框分配给新变量并将它们保存为 csv 文件。
a <- rep(1:5,each=3)
b <-rep(1:3,each=5)
c <- data.frame(a,b)
# a b
1 1 1
2 1 1
3 1 1
4 2 1
5 2 1
6 2 2
7 3 2
8 3 2
9 3 2
10 4 2
11 4 3
12 4 3
13 5 3
14 5 3
15 5 3
我想按a列拆分c。即 a 列中所有行均为 1 的行从 c 中拆分出来,并将其分配给 A 并将 A 保存为 A.csv。与 B.csv 相同,a 列中全部为 2。
我能做的是
A<-c[c$a%in%1,]
write.csv (A, "A.csv")
B<-c[c$a%in%2,]
write.csv (B, "B.csv")
...
如果我有 1000 行并且会有很多子集,我只是想知道是否有一种简单的方法可以通过使用 for 循环来做到这一点?
The split()
函数对于分割数据框非常有用。另外,您可以使用lapply()
这里 - 它应该比循环更有效。
dfs <- split(c, c$a) # list of dfs
# use numbers as file names
lapply(names(dfs),
function(x){write.csv(dfs[[x]], paste0(x,".csv"),
row.names = FALSE)})
# or use letters (max 26!) as file names
names(dfs) <- LETTERS[1:length(dfs)]
lapply(names(dfs),
function(x){write.csv(dfs[[x]],
file = paste0(x,".csv"),
row.names = FALSE)})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)