子集条件最接近/更低的观察值

时间:2017-09-04 14:47:39

标签: r loops for-loop subset

AreaCode    Name    Rank
1001108 HA  - 2326
1001247 HA  - 2327
1003063 GC -    2328
1000957 DG -    2329
1001290 EA -    2330
1003305 GC -    2331
1003417 GC -    2332
1006442 WL -    2333
1005076 PK - 2334
1004581 NL -    2335

我是R的新手,我遇到了一些问题。我有一个数据集,我想将最接近的较高/较低排名的AreaCodes子集到GC,以便进行病例对照研究。

所以我想在一个单独的数据框中使用AreaCode 1001247,1000957,1001290,1006442。我该怎么做呢?我假设通过一个循环,但没有这些经验。这些数据有大约6000个观察结果,因此手工操作变得令人筋疲力尽。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

cumsumrle在这里很有用

brks <- cumsum(rle(df$Name)$lengths) 
# [1]  2  3  4  5  7  8  9 10

equalsGC <- which(rle(df$Name)$values=="GC")
# [1] 2 5

ans <- df$AreaCode[sort(brks[c(equalsGC+1, equalsGC-1)])]
# [1] 1001247 1003063 1001290 1003417

作为单个块

brks <- cumsum(rle(df$Name)$lengths) 
equalsGC <- which(rle(df$Name)$values=="GC")
ans <- df$AreaCode[sort(brks[c(equalsGC+1, equalsGC-1)])]

答案 1 :(得分:0)

替代方案是这样的(假设Name是一个字符变量):

List<Object> mData;

public void addItems(List<IArticleInterface> list) {
        mData.addAll(list);
}