我想从R中的一个列表中筛选出‘相似’条目.输入列表如下:

d1=data.frame(y1 = c('Mike'),
              y2 = c('Tsoutsa'),
              y3 = c('Apple'),
              time = 50)

d2=data.frame(y1 = c('Mike'),
              y2 = c('Tsoutsa'),
              y3 = c('Orange'),
              time = 160)

d3=data.frame(y1 = c('Mike'),
              y2 = c('Tsoutsa'),
              y3 = c('Lemon'),
              time = 100)

d4=data.frame(y1 = c('Anna'),
              y2 = c('Pournova'),
              y3 = c('Nikolief'),
              time = 30)

d5=data.frame(y1 = c('Anna'),
              y2 = c('Pournova'),
              y3 = c('Leeds'),
              y4 = c('York'),
              time = 80 )

d6=data.frame(y1 = c('Loulis'),
              y2 = c('City'),
              time = 200 )

d7=data.frame(y1 = c('Ann'),
              y2 = c('Klitor'),
              time = 200 )

input = list(d1, d2, d3, d4, d5, d6, d7)

在输出列表中,我只想保留具有唯一的y1y2值的数据帧.如果存在具有相同y1y2的数据帧,则保留具有最高time的数据帧. 因此,输出列表应该是:output = list(d2, d5, d6, d7).

做这件事最有效的方法是什么?非常感谢!

推荐答案

使用dplyr,您可以绑定行(dplyr::BIND_ROWS,使用.id参数创建一个标识符),并且对于y1y2组,您可以 Select 时间最长的组,然后提取ID集.使用它来索引输入列表

library(dplyr)

retain = as.numeric(bind_rows(input,.id = "d") %>% 
  group_by(y1,y2) %>% 
  slice_max(time) %>%
  pull(d))

output <- input[sort(retain)]

使用data.table的方法如下:

library(data.table)

input[
  rbindlist(lapply(input, setDT), idcol="d", fill=T)[, .SD[time==max(time)], .(y1,y2)]$d
]

输出:

[[1]]
    y1      y2     y3 time
1 Mike Tsoutsa Orange  160

[[2]]
    y1       y2    y3   y4 time
1 Anna Pournova Leeds York   80

[[3]]
      y1   y2 time
1 Loulis City  200

[[4]]
   y1     y2 time
1 Ann Klitor  200

R相关问答推荐

R -创建一列,指示另一列是否具有相同的值

在R中,如何创建时间间隔的图表?

如何在弹性表中为类别值的背景上色

列出用m n个值替换来绘制n个数字的所有方法(i.o.w.:R中大小为n的集合的所有划分为m个不同子集)

R等效于LABpascal(n,1)不同的列符号

如何对数据集进行逆向工程?

selectInput不返回ALL,并将因子转换为shiny 的数字

删除列表中存储的数据帧内和数据帧之间的重复行

Rplotly中的Sankey Diagram:意外连接&

如何在geom_col中反转条

如何优化向量的以下条件赋值?

在ggplot中为不同几何体使用不同的 colored颜色 比例

如何删除仅在数据集顶部和底部包含零的行

打印XTS对象

将多个列值转换为二进制

列名具有特殊字符时的循环回归

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

为R中的16组参数生成10000个样本的有效方法是什么?

如何使用grepl()在数据帧列表中 Select 特定字符串?