使用从数据框中提取的数据填充列表

时间:2018-03-08 18:52:08

标签: r dataframe apply

我有一个这样的数据框:

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来填充列表。

3 个答案:

答案 0 :(得分:3)

split(df$b, df$a)
$`1`
[1] 2 4 7

$`2`
[1] 9 1

这是特别好的,因为列表名称默认为a的值。

那就是说,我同意alistaire的评论。这似乎是一个XY问题 - 很有可能在data.tabledplyr轻松完成下一步操作,而无需创建此单独的列表。

答案 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