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

标签 r

我有一个数据集,每列包含不同的测量值,最后一列包含值 (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/

相关文章:

r - ggplot : align multiple faceted plots - facets all different sizes

r - 更改 ggplot2 中闪避条形图的颜色

r - 哪些因素影响 ggplot 图例的排序方式

python - 在Python中加载xgboost模型,该模型由R中的 `xgboost::save()`保存

r - 在 R 中为 gstat 中的克里金法创建网格

使用 apply 函数替换在 R 中的 dfs 列表上迭代运行向后逐步回归的 for 循环,以减少计算时间

r - 如何将表情符号与 R 正则表达式匹配?

r - 按计数的彩色条形图

r - R 中的数据集文件大小,可能的开销吗?

用于选择除第一行之外的所有行的 R 语法