我正在使用R,我有一个包含超过23,000个条目的数据框,如下所示:
df[1:10,10:13]
Start End Distance under50
1 248 1453 3 0
2 1450 2115 -30 0
3 2145 3254 -68 1
4 3322 5643 -3 0
5 5646 7451 -3 0
6 7454 8641 -14 0
7 8655 9860 -120 1
8 9980 11413 -65 1
9 11478 12614 -364 1
10 12978 13187 -275 1
我想要做的是基于df [,4]中的值从0开始到1结束,从df [,1]中选择第一个数字,用列选择df [,2]中的数字结束于1。
所以例如对于这个数据行#1从0开始,第2行也是0,第3行是1.所以我想从第1行获取248,从第3行获取3254然后将这些放在新的数据帧中列名称为Start和End。
然后我想循环查找数据帧中的每个实例。因此,对于此示例,它还将拉出行开始和行7结束的值。
所以最后我想要一个如下所示的提取数据框:
Start End
1 248 3254
2 3322 9860
3 #### ####
我尝试编写一个选择start的循环,如果df [,4] == 0并且基于df [,4] == 1结束但是它选择了每个以df [,4] == 0 0开头
我感谢任何帮助!
答案 0 :(得分:2)
这样的事情应该有效:
# The under50 flag is 1 and has just gone up by 1: end of a group
df$group_end = (df$under50 == 1) & (c(0, diff(df$under50)) == 1)
# The under50 flag is 0 and has just gone down by 1
# (always true for first row): start of a group
df$group_start = c(-1, diff(df$under50)) == -1
starts = df$Start[df$group_start]
ends = df$End[df$group_end]
您可以查看group_end
和group_start
列,了解它的工作原理。以下是示例数据集的输出:
> starts
[1] 248 3322
> ends
[1] 3254 9860
您可能需要稍微修改一下,具体取决于您的实际数据集如何看向最终行,它可能会识别出一个没有结束的额外开始。