gpt4 book ai didi

r - 使用条件子集数据框并将每个子集保存为新数据框

转载 作者:行者123 更新时间:2023-12-01 11:20:29 25 4
gpt4 key购买 nike

我有一个数据集,每列包含不同的测量值,最后一列包含值 (0,1,2)。

例如假设我的数据框看起来像这样(忽略 v1:v5 的值)

 1. v1 v2 v3 v4 v5 v6 
2. 24 76 98 89 87 2
3. 24 76 98 89 87 2
4. 24 76 98 89 87 1
5. 24 76 98 89 87 2
6. 24 76 98 89 87 2

我对 v6 列的值感兴趣,我想提取值等于 2 的行。在上面的示例中,我想提取前 2 行并将它们另存为新数据框,然后提取将第 5 行和第 6 行作为不同的数据框并保存。更清楚地说,当我的值等于 2 并且是相应的时,我需要将它们保存为一个新的数据框。当值不同时,我需要循环忽略它并再次找到感兴趣的值(即 2)。如果我的数据帧在最后一列中有 70 个连续 block 2,我需要以 70 个数据帧结束。

我尝试了 for 循环,但我对 R 和编程还很陌生,但我被卡住了。

这是我到目前为止尝试过的:

> 
>
>
>x=1
>for (i in 1:nrow(dataframe)) {
>
> if (dataframe[i,lastcolumn] == 2 && x==1) {
>
> start.event <- dataframe[i,]
>
> }
>
> if (dataframe[i,lastcolumn] != 2) {
> end.event <- dataframe[i-1,]
>
> }
>
> else {
>
> df[1] <- dataframe( start.event:end.event , )
> x = 1
> }
> }

如果有任何帮助,我将不胜感激。

提前致谢

最佳答案

这是使用 base R 的一种方式

#use rle to set indicator variable for groups of 2
rl <- rle(df$v6)
rl$values <- cumsum(rl$lengths==2)
df$ind <- inverse.rle(rl)

#filter out other values from df
df <- df[df$v6==2,]

#split by indicator (and remove it)
dflist <- split(df[,-ncol(df)],df$ind)

dflist #elements of list are named after number of 2-group
$`1`
v1 v2 v3 v4 v5 v6
2. 24 76 98 89 87 2
3. 24 76 98 89 87 2

$`2`
v1 v2 v3 v4 v5 v6
5. 24 76 98 89 87 2
6. 24 76 98 89 87 2

关于r - 使用条件子集数据框并将每个子集保存为新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44285477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com