R如何比较重复的两列



我的数据具有重复观察结果,有时在两个元素上匹配,但在第三个元素上有所不同,有时仅在第一个元素匹配。例如:

name <- c("John", "Mary", "Anna", "Anna", "John", "Mary", "Anna", "John")
sport <- c("soccer", "basketball", "tennis", "tennis", "soccer", "soccer", "badminton", "basketball")
time <- c(41, 5, 10, 61, 1, 12, 18, 99)
data <- cbind(name, sport, time)
name    sport       time
John   soccer        41
Mary   basketball    5
Anna   tennis        10 
Anna   tennis        61 
John   soccer        1
Mary   soccer        12
Anna   badminton     18
John   basketball    99

对于在前两列上匹配的每个观察结果(例如,在此名称和运动上),我只想以最大的时间值保持观察。对于仅在第一列(例如名称)上匹配的人,我想保持它们状态。例如:

name    sport       time
John   soccer        41
Mary   basketball    5
Anna   tennis        61 
Mary   soccer        12
Anna   badminton     18
John   basketball    99

我该怎么做?

一个建议,而不是您拥有的建议:

data <- data.frame(name, sport, time)

在下面执行以查看发生了什么

sapply(data, class)

cbind默认情况下胁迫所有角色类别,您不想要那个。

我是通过分组来总结值(时间)关于名称和运动,并命名可变time。另外,请使用na.rm = t在数据中排除案例,其中可能会在可变时间中丢失值

#dplyr version
library(dplyr)
data %>% group_by(name, sport) %>%
    summarize(time = max(time, na.rm = T))

在上面的评论中建议的汇总也有效,但是我发现dplyr语法更易于阅读

相关内容

  • 没有找到相关文章

最新更新