【发布时间】:2017-05-31 12:57:31
【问题描述】:
我有一个数据集,每列包含不同的测量值,最后一列包含值 (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 个连续 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
> }
> }
非常感谢任何帮助。
提前致谢
【问题讨论】:
-
每个保存的
data.frame是两行,还是程序应该抓取所有连续的行? -
程序应该抓取所有连续的行
-
不确定这是否有帮助,但可能与此有关:
which( diff(as.integer(rownames(dataframe[dataframe$V6 == 2,])) ) == 1)
标签: r