【问题标题】:Keeping values in one row based on values in different row and different column根据不同行和不同列中的值将值保留在一行中
【发布时间】:2019-04-22 07:00:05
【问题描述】:

只有当 NP==0 在其正上方的行中时,是否有办法为 tdif 中的值创建新的 DF?

    Subject tdif NP
1       KM3 63.8  0
2       KM3  4.6  1
3       KM3 70.6  0
4       KM3 30.4  1
5       KM3 44.8  0
6       KM3 12.1  1
7       KM3 27.1  1
8       KM3 36.0  0
9       KM3 38.0  1
10      KM3  0.1  1

因此,期望的输出是:

    Subject tdif NP
1       KM3  4.6  1
2       KM3 30.4  1
3       KM3 12.1  1
4       KM3 38.0  1

我很高兴使用 tidyverse 或任何其他软件包(到目前为止,我已经使用它来处理我的原始数据),但我花了很长时间为这种特定类型的数据处理寻求帮助到目前为止,在 R 中。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用which 来获取NP == 0 所在的行索引并将其加1 以获取下一行。

    df[which(df$NP == 0) + 1, ]
    
    #  Subject tdif NP
    #2     KM3  4.6  1
    #4     KM3 30.4  1
    #6     KM3 12.1  1
    #9     KM3 38.0  1
    

    如果您的最后一行有 0,这可能会给您额外的一行 NAs,您可以通过将值与 nrow(df) 进行比较来删除它,或者使用 dplyr::lag


    dplyrlag

    library(dplyr)
    df %>% filter(lag(NP) == 0)
    

    【讨论】:

    • 据我的实际数据所知,这是可行的。谢谢!但是,它究竟是如何工作的?我对代码语法的理解还是很陌生。
    • @Kevin which(df$NP == 0) 返回行号,其中 NP == 0 我们将 1 添加到它以获取下一行并使用此索引来子集数据帧,而 lag 只选择那些之前的行 @987654333 @ 值为 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多