r

时间:2017-10-17 22:01:52

标签: r iteration subset

对于数据表,如何进行动态搜索,仅选择具有相同Tail_No的行,具有不同目的地的相同Flight_ID。我有数百万行 以下是我的表

    My_data_table

   Unique_ID Tail_No  Flight_ID   Arrival_Airport 
    1AA       1234      abcd          JFK
    2AA       4234      bcde          BWI
    3AA       5234      zbcd          DCA
    4AA       6234      ybcd          LOS
    5AA       7234      mbcd          JFK
    6AA       1284      lbcd          LAX
    7AA       1234      abcd          DEN

这是我正在寻找的结果。注意我有数百万行,因此Tail_No和Flight_ID的子集是不可行的。

     My Result_Table 
  Unique_ID  Tail_No  Flight_ID   Arrival_Airport 
    1AA       1234      abcd          JFK
    7AA       1234      abcd          DEN

3 个答案:

答案 0 :(得分:1)

首先,删除Tail_No,Flight_ID和Arrival_Airport(目标)上的所有重复项。即 - 那些去往同一目的地的人 然后识别仍然重复的Tail_No / Flight_ID组合 最后,合并回原始集合以获取请求的行:

vars <- c("Tail_No", "Flight_ID")
tmp <- dat[!duplicated(dat[c(vars, "Arrival_Airport")]),]
merge(tmp, tmp[duplicated(dat[vars]), vars])

#  Tail_No Flight_ID Unique_ID Arrival_Airport
#1    1234      abcd       1AA             JFK
#2    1234      abcd       7AA             DEN

答案 1 :(得分:0)

我建议阅读子集化here的方法。这段代码应该是您正在寻找的。

My_data_table[My_data_table$Flight_ID == 'abcd' & My_data_table$Tail_No == 1234,]

答案 2 :(得分:0)

第二次尝试:子集到我们有重复的Tail_No / Flight_ID对的行,然后过滤到每个组中的唯一Arrival_Airport

require(data.table)
setDT(My_data_table)

My_data_table[,if(.N>1)unique(.SD),keyby=.(Tail_No,Flight_ID)]

   Tail_No Flight_ID Unique_ID Arrival_Airport
1:    1234      abcd       1AA             JFK
2:    1234      abcd       7AA             DEN