这不是
一个关于如何做某事本身的问题,更多的是如何做得更好。
在 R 中,假设我有一个数据帧 df:
df<-read.table(text="
Column1 Column2 Category
1 1 A
2 1 B
3 1 D
4 1 E
5 2 B
6 3 B
7 4 C
8 4 C
9 5 E
10 6 A", header=TRUE)
现在我想创建一个(数据帧)列表,其中列表中的每个数据帧都是 df 的子集,其中每个子集都以 Category 为条件。我可以按如下方式创建它:
mylist <-list()
mylist[[1]] <- subset(df,df$Category=='A')
mylist[[2]] <- subset(df,df$Category=='B')
mylist[[3]] <- subset(df,df$Category=='C')
mylist[[4]] <- subset(df,df$Category=='D')
mylist[[5]] <- subset(df,df$Category=='E')
现在这有效,但非常笨拙,实际上是一个硬编码循环,如果我有超过五个类别,则不会轻易扩展。
有没有更紧密/更好的方法来做到这一点?
您可以使用函数 split
split(df,df$Category)
在这种情况下,您可以使用 dplyr 库和循环:
library(dplyr)
mylist <-list()
for ( v in unique(df$Category)){
mylist[[length(mylist)+1]] <- filter(df, Category == v)
}
mylist