【发布时间】:2021-02-03 11:06:05
【问题描述】:
我有以下数据框:
df=data.frame(term=c("hello","affirms","allows","hello","always","allows","allows","affirms"),
class=c("class 1","class 1","class 2", "class 2", "class 2","class 3","class 4","class
4"),stringsAsFactors = FALSE)
df
term class
1 hello class 1
2 affirms class 1
3 allows class 2
4 hello class 2
5 always class 2
6 allows class 3
7 allows class 4
8 affirms class 4
我想获得这样的列表:
combinations <- list(
hello = c("class 1", "class 2"),
affirms = c("class 1", "class 4"),
allows = c("class 2", "class 3", "class 4"),
always = c("class 2")
)
Split data.frame based on levels of a factor into new data.frames 中提出的解决方案不适合我的问题,因为如果我应用了上述问题的公认答案:
X <- split(df, df$class)
Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, 1])
names(Y) <- c("class 1", "class 2", "class 3", "class 4")
list2env(Y, envir = .GlobalEnv)
`class 1`
我得到
"hello" "affirms"
这不是我们想要的结果。无论如何,我尝试用这种方式修改代码:
X <- split(df, df$term)
Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, 2])
结果似乎接近预期的结果,但是:
Y
[[1]]
[1] "class 1" "class 4"
[[2]]
[1] "class 2" "class 3" "class 4"
[[3]]
[1] "class 2"
[[4]]
[1] "class 1" "class 2"
我怎么知道例如Y[[4]]对应hello,而Y[[2]]对应allows?
【问题讨论】:
-
你需要的不是
split(df$class, df$term)吗? -
@RonakShah,谢谢,是的,这正是我所需要的。