我想以不同的间隔从数据框中的列中提取值。间隔存储在列表中。有没有办法提取这个?
该列如下所示:
6211
6111
711
414
3211
3311
3411
3511
6211
6111
...
和这样的列表:
"2" "4" "2" "6" "15" "2" "9"...
现在我想在df的列上应用列表(列表定义了所需值之间的步骤。结果应该存储为df中的新变量。由于缺少值,我们需要用NAs填充新列。这些应该存储在列表中定义的intervalls中。
所以结果应该是这样的:
# X Y
1 6211 711
2 6111 NA
3 711 NA
4 414 3411
5 3211 NA
....
其中行之间的NA数量再次由向量定义。在最后一步中,我想将X和Y粘贴在一起,以获得一个关键变量。
谢谢!
我们可以在矢量上使用cumsum
并对列进行子集化
df$x[cumsum(c(1,vec))]
#[1] 6211 711 3411 6211
或者如果你想把它作为一个列
df[cumsum(c(1,vec)), ,drop = FALSE]
或者使用slice
的dplyr
library(dplyr)
df %>% slice(cumsum(c(1, vec)))
# x
#1 6211
#2 711
#3 3411
#4 6211
编辑
对于更新的部分,我们可以做到新的Y
列
vals <- df$x[cumsum(c(1,vec))][-1]
df$y <- NA
df$y[cumsum(c(1, vec + 1))] <- vals
数据
df <- data.frame(x = c(6211, 6111, 711, 414,3211,3311, 3411,3511,6211,6111))
vec <- as.numeric(c("2","4","2"))