R 如何在数据框中创建唯一的行

R 如何在数据框中创建唯一的行,r,dplyr,R,Dplyr,我有一个重复行的数据帧。我需要从中创建唯一的行。我试过几种选择,但似乎不起作用 l1 <-summarise(group_by(l,bowler,wickets),economyRate,d=unique(date)) 日期是唯一的,可用于获取可选择行的行。请让我知道如何做到这一点 在示例数据集中,每个“bowler”、“wickets”组合都有多个唯一的日期元素。一个选项是将唯一的日期粘贴在一起 l %>% group_by(bowler, wickets) %>

我有一个重复行的数据帧。我需要从中创建唯一的行。我试过几种选择,但似乎不起作用

  l1 <-summarise(group_by(l,bowler,wickets),economyRate,d=unique(date))

日期是唯一的,可用于获取可选择行的行。请让我知道如何做到这一点

在示例数据集中,每个“bowler”、“wickets”组合都有多个
唯一的
日期元素。一个选项是将
唯一的
日期粘贴在一起

l %>%
    group_by(bowler, wickets) %>% 
    summarise(economyRate= mean(economyRate), d = toString(unique(date)))
或者将“d”创建为
列表

l %>%
    group_by(bowler, wickets) %>% 
    summarise(economyRate= mean(economyRate), d = list(unique(date)))
关于“economyRate”,我猜OP需要它的
平均值

如果我们需要在原始数据集中创建一列
unique
date,请使用
mutate

l %>% 
    group_by(bowler, wickets) %>%
    mutate(d = list(unique(date)))
由于OP没有提供预期的输出,下面可能也是结果

l %>%
     group_by(bowler, wickets) %>% 
     distinct(date)
或者像@Frank提到的那样

l %>%
  group_by(bowler,wickets,date) %>%
  slice(1L)

在示例数据集中,每个“bowler”、“wickets”组合都有多个
唯一的
日期元素。一个选项是将
唯一的
日期粘贴在一起

l %>%
    group_by(bowler, wickets) %>% 
    summarise(economyRate= mean(economyRate), d = toString(unique(date)))
或者将“d”创建为
列表

l %>%
    group_by(bowler, wickets) %>% 
    summarise(economyRate= mean(economyRate), d = list(unique(date)))
关于“economyRate”,我猜OP需要它的
平均值

如果我们需要在原始数据集中创建一列
unique
date,请使用
mutate

l %>% 
    group_by(bowler, wickets) %>%
    mutate(d = list(unique(date)))
由于OP没有提供预期的输出,下面可能也是结果

l %>%
     group_by(bowler, wickets) %>% 
     distinct(date)
或者像@Frank提到的那样

l %>%
  group_by(bowler,wickets,date) %>%
  slice(1L)

所以,我采取了一种不寻常的方法来做这个手术,但是当日期从我创建的csv文件中传过来时,我让它仍然是一个因素。您可以轻松地将日期列转换为具有

l1$date<-as.factor(l1$date)
在这之后,它是关于确保在最简洁的查询中正确使用子设置语法:

l2<-l1[!duplicated(l1$date),]
唯一需要注意的是在
后面保留逗号!重复(l1$date)
以确保搜索所有列并将其包含在最终子集中

如果您想要日期或字符,您可以
as.POSIXct
as.character
将它们转换为一种可用的格式,以便在接下来的操作中使用


我希望这对你有用

所以,我采取了一种不寻常的方式来做这个手术,但是当日期从我创建的csv文件中传过来时,我让它仍然是一个因素。您可以轻松地将日期列转换为具有

l1$date<-as.factor(l1$date)
在这之后,它是关于确保在最简洁的查询中正确使用子设置语法:

l2<-l1[!duplicated(l1$date),]
唯一需要注意的是在
后面保留逗号!重复(l1$date)
以确保搜索所有列并将其包含在最终子集中

如果您想要日期或字符,您可以
as.POSIXct
as.character
将它们转换为一种可用的格式,以便在接下来的操作中使用


我希望这对你有用

如果我正确理解了操作的意图,他只是要求删除重复的行。所以,我会使用

unique(l1)
这就是
?unique
所说的:

unique返回向量、数据帧或数组,如x,但删除了重复的元素/行


如果我没有弄错,他只是要求删除重复的行。所以,我会使用

unique(l1)
这就是
?unique
所说的:

unique返回向量、数据帧或数组,如x,但删除了重复的元素/行

资料
l数据

l这是因为
summary
为每个组的组合返回一个值。如果组合中有多个唯一日期,则会导致不平衡。最好发布示例数据和预期输出的dput。dplyr的作者正在考虑做一个扩展来支持这一点(akrun所说的),看起来是这样的:请提供创建示例data.frame的代码并回答您的问题好吗?这将允许轻松测试答案的正确性,而不会加重海报重新创建数据的负担。-谢谢,这是因为
summary
为每个组的组合返回一个值。如果组合中有多个唯一日期,则会导致不平衡。最好发布示例数据和预期输出的dput。dplyr的作者正在考虑做一个扩展来支持这一点(akrun所说的),看起来是这样的:请提供创建示例data.frame的代码并回答您的问题好吗?这将允许轻松测试答案的正确性,而不会加重海报重新创建数据的负担。-谢谢使用
dplyr::distinct
只保留相似的行。但是它在这里不起作用。@PaulRougieux在基函数上使用
dplyr
的好处是什么
unique
?请参见?distinct,您可以指定“确定唯一性时使用的变量”。例如
a谢谢,我不知道
dplyr::distinct
。看起来像是
dplyr
等效于
data.table::unique(a,by=“i”)
。使用
dplyr::distinct
仅保留相似的行。但是它在这里不起作用。@PaulRougieux在基函数上使用
dplyr
的好处是什么
unique
?请参见?distinct,您可以指定“确定唯一性时使用的变量”。例如
a谢谢,我不知道
dplyr::distinct
。看起来像是
dplyr
相当于
data.table::unique(a,by=“i”)
。谢谢@akrun!这就是我想要的。我最终使用了以下代码l1%group_by(bowler、wickets、economyRate)%%>%distinct(date)谢谢@akrun!这就是我想要的。我最终使用以下代码l1%group_by(bowler、wickets、economyRate)%>%distinct(日期)