我的数据具有重复观察结果,有时在两个元素上匹配,但在第三个元素上有所不同,有时仅在第一个元素匹配。例如:
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语法更易于阅读