【问题标题】:Extract all rows containing second unique value for each column by group按组提取每列包含第二个唯一值的所有行
【发布时间】:2018-02-09 17:14:33
【问题描述】:

这与中提出的问题直接相关 Extract all rows containing first value for each unique value of another column

但我不想返回检测到 ID 的第一年,而是只返回第二年的所有行。

改编自上述主题中的答案

test

    ID yr
1  54V  1
2  54V  1
3  54V  1
4  54V  2
5  54V  2
6  56V  2
7  56V  2
8  56V  3
9  59V  1
10 59V  2
11 59V  3

    test2 <- test[with(test, as.logical(ave(yr, ID, FUN = function(x) x==x[2L]))),]
         or
    test2 <- setDT(test)[, .SD[yr==yr[2L]], ID]

产生奇怪的结果。

   ID yr
1 54V  1
2 54V  1
3 54V  1
5 56V  2
6 56V  2
9 59V  2

我想要的结果是

    ID yr
4  54V  2
5  54V  2
8  56V  3
10 59V  2

我做错了什么?

【问题讨论】:

    标签: r plyr


    【解决方案1】:
     subset(test,as.logical(ave(yr,ID,FUN=function(x)x==unique(x)[2]))) 
      ID yr
    1 54V  2
    2 54V  2
    3 56V  3
    4 59V  2
    
     library(data.table)
     setDT(test)[,.SD[yr==unique(yr)[2]],by=ID]
        ID V1
    1: 54V  2
    2: 54V  2
    3: 56V  3
    4: 59V  2
    
    test%>%group_by(ID)%>%filter(yr==unique(yr)[2])
    # A tibble: 4 x 2
         ID    yy
      <chr> <int>
    1   54V     2
    2   54V     2
    3   56V     3
    4   59V     2
    

    【讨论】:

    • 谢谢,但我怎样才能返回包含第二次出现的所有行,而不是唯一的?假设 54V 和 2 年有两年。
    • 在这种情况下,结果将与所需的输出不匹配
    • 不,因为本例中的示例,但参考第一个问题,应该清楚我需要所有行,而不是唯一的。我将不得不改变我的例子。非常感谢您的回答。
    • 谢谢,我可以接受,因为这回答了帖子中的直接问题。但是由于我的数据集有很多列,我需要将它们全部保留,正如我在上一篇文章中所说的那样,你有什么想法可以调整上面的代码吗?
    • 尝试使用 data.table 之一为您的数据集进行编辑
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2019-12-17
    • 2021-08-31
    相关资源
    最近更新 更多