【问题标题】:First row occurrence of each value [duplicate]每个值的第一行出现[重复]
【发布时间】:2016-05-13 04:52:03
【问题描述】:

我有两个变量 a 和按 a 排序的数量

a      amount

112    12000 
112    15000 
113    14000
114    18000
114    17000 
115    19000 
115    17000

我希望变量中每个值的第一行出现

output 

 a    amount
112  12000
113  14000
114  18000
115  19000 

【问题讨论】:

标签: r


【解决方案1】:

您可以使用duplicated,它会为您提供重复的值。您可以使用 ! 运算符忽略它们

df[!duplicated(df$a), ]


#   a amount
#1 112  12000
#3 113  14000
#4 114  18000
#6 115  19000

或者

您也可以使用matchunique

df[match(unique(df$a), df$a), ]

#   a amount
#1 112  12000
#3 113  14000
#4 114  18000
#6 115  19000

【讨论】:

    【解决方案2】:

    我们可以使用

    library(data.table)
    setDT(df1)[, head(.SD, 1), by = a]
    

    或快速变体(由@Symbolix 提供)

    setDT(df1)[df1[, .I[1L], by = a]$V1]
    

    或使用unique

    unique(setDT(df1), by = "a")
    #    a amount
    #1: 112  12000
    #2: 113  14000
    #3: 114  18000
    #4: 115  19000
    

    或者

    library(dplyr)
    df1 %>%
        group_by(a) %>%
        slice(1)
    

    或者使用summarisefirst

    df1 %>%
       group_by(a) %>% 
       summarise(amount = first(amount))
    

    或者base R

    aggregate(.~a, df1, head, 1)
    #    a amount
    #1 112  12000
    #2 113  14000
    #3 114  18000
    #4 115  19000
    

    【讨论】:

    • 我怀疑避免 .SD 更快 dt[ dt[, .I[1], by = a]$V1 ]
    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2020-10-07
    • 2012-10-25
    • 2017-07-24
    • 2012-08-17
    • 2014-12-14
    • 1970-01-01
    相关资源
    最近更新 更多