如何以不同的间隔从列表中提取值(由列表定义)

问题描述 投票:0回答:1

我想以不同的间隔从数据框中的列中提取值。间隔存储在列表中。有没有办法提取这个?

该列如下所示:

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粘贴在一起,以获得一个关键变量。

谢谢!

r list dataframe vector extract
1个回答
0
投票

我们可以在矢量上使用cumsum并对列进行子集化

df$x[cumsum(c(1,vec))]
#[1] 6211  711 3411 6211

或者如果你想把它作为一个列

df[cumsum(c(1,vec)), ,drop = FALSE]

或者使用slicedplyr

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"))
© www.soinside.com 2019 - 2024. All rights reserved.