通过id删除最后n行0,然后通过R中的Id尾随n个元素

时间:2016-10-28 17:10:44

标签: r

final dataset我附加了一个数据集。

我想删除中的所有Last 0 二进制由Id,然后选择tail 3 通过id。 (注意:对于Id 2,仅保留2个 w5和w6)。它就像最终的数据集。

有没有有效的方法呢?

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

ID = c(rep(1, 8), rep(2, 4), rep(3, 8))
week = c(2:9, 5:8, 13:20)
binary = c(0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0)

dataset = data.frame(ID, week, binary)

> dataset
   ID week binary
1   1    2      0
2   1    3      1
3   1    4      1
4   1    5      1
5   1    6      1
6   1    7      0
7   1    8      0
8   1    9      0
9   2    5      1
10  2    6      1
11  2    7      0
12  2    8      0
13  3   13      1
14  3   14      1
15  3   15      1
16  3   16      0
17  3   17      0
18  3   18      1
19  3   19      0
20  3   20      0

解决方案:

# Split dataset by ID
byGroupDf = split(dataset, ID)

# For each grouped dataset, take only rows up till the last row where ID not equal to 0
byGroupFinal = lapply(byGroupDf, function(x) tail(x[1:max(which(x$binary != 0)),], 3))

# Combine the grouped datasets
FinalDf = do.call(rbind, byGroupFinal)

> FinalDf
     ID week binary
1.3   1    4      1
1.4   1    5      1
1.5   1    6      1
2.9   2    5      1
2.10  2    6      1
3.16  3   16      0
3.17  3   17      0
3.18  3   18      1