gpt4 book ai didi

r - 如何删除r中data.table中的所有重复行

转载 作者:行者123 更新时间:2023-12-04 10:42:49 26 4
gpt4 key购买 nike

假设我们有

library(data.table)    
dt <- data.table(Date = c(201405,201405,201504,201505, 201505,201505), ID = c(500,500,600,700,500, 700), INC = c(20,30,50,75,80,90))

返回,
     Date  ID INC
1: 201405 500 20
2: 201405 500 30
3: 201504 600 50
4: 201505 700 75
5: 201505 500 80
6: 201505 700 90

我想删除同一日期中的所有 ID。返回应该是
     Date  ID INC
1: 201504 600 50
2: 201505 500 80

你能建议吗?

最佳答案

我们按“ID”分组,得到一个逻辑索引 duplicated在“日期”上,并否定以使所有唯一元素现在都为 TRUE,使用 .I要获取行索引,请提取索引列“V1”并使用它对“dt”进行子集化。

dt[dt[, .I[!(duplicated(Date)|duplicated(Date, fromLast=TRUE))], ID]$V1]
# Date ID INC
#1: 201505 500 80
#2: 201504 600 50

或者另一种选择是按“日期”、“ID”和 if 分组。 nrow 等于 1 ( .N==1 ),我们得到 Data.table 的子集 ( .SD )。
dt[, if(.N==1) .SD, .(Date, ID)]
# Date ID INC
#1: 201504 600 50
#2: 201505 500 80

或者正如@Frank 提到的,我们可以使用 data.table/base R 组合
DT[ave(seq(.N), Date, ID, FUN = function(x) length(x) == 1L)]

关于r - 如何删除r中data.table中的所有重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33252365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com