我想做的是从包含列表的数据帧列中提取元素,想象一下具有3行的df $ A列,每行包含list:
c(111, 222, 333)
c(444, 555, 666)
c(777, 888, 999)
(列表从1到23个元素不等)
而df $ B列存储元素的某些位置:
1
c(1, 2)
c(1, 2, 3)
我的目标是根据存储在df $ A列中的索引从df $ B列提取到df $ C列,因此df $ C列看起来像
111
c(444, 555)
c(777, 888, 999)
我已经尝试过unlist,sapply,mutate,使用vector访问列表元素的不同组合,例如
df$A[nrow][[c(df$B)]]
,依此类推,但我一直遇到不同的错误,而且还没有接近预期的结果。
最后,我要实现的是对列表中特定位置的每一行中的整数求和,因此潜在的df $ D可能看起来像
111
999
2664
恐怕我的整个方法可能是错误的,并且我正在强迫R以一种并非旨在的方式行事,但是到目前为止,我通常可以对自己问的每个问题都能找到正确的答案。
答案 0 :(得分:1)
不确定整个data.frame是否包含列表项:
数据:(尽管不建议使用)仅使用两个列表(l1
,l2
)
df1 <- data.frame(A = 1:3)
df1$A <- list(c(111, 222, 333),
c(444, 555, 666),
c(777, 888, 999))
df1$B <- list(1,
c(1, 2),
c(1, 2, 3))
代码:?mapply
的时间。
#df1$D <-
mapply(function(vals, inds) {sum(vals[inds])}, vals = df1$A, inds = df1$B)
结果:
#[1] 111 999 2664