我有一个这样的数据框:
a=c(rep(1,3), rep(2,2))
b=c(2,4,7,9,1)
df <- data.frame(a,b)
> df
a b
1 1 2
2 1 4
3 1 7
4 2 9
5 2 1
我想在列“a”(在本例中为“2”)中创建一个包含与不同值一样多的元素的列表,并根据列“a”将列“b”的值存储在列表中。我正在尝试这样的事情:
lst <-list()
ff <-function(){lili[[df$a]] <- df$b}
apply(ff, df)
这显然不起作用......但我基本上想做的是:
lst <- list(c(2,4), c(7,9,1))
但是在大df的行上使用apply来填充列表。
答案 0 :(得分:3)
split(df$b, df$a)
$`1`
[1] 2 4 7
$`2`
[1] 9 1
这是特别好的,因为列表名称默认为a
的值。
那就是说,我同意alistaire的评论。这似乎是一个XY问题 - 很有可能在data.table
或dplyr
轻松完成下一步操作,而无需创建此单独的列表。
答案 1 :(得分:1)
试试这个:lapply(unique(df$a),function(x) df$b[df$a==x])
答案 2 :(得分:0)
以下是使用unstack
unstack(df, b~a)
#$`1`
#[1] 2 4 7
#$`2`
#[1] 9 1