我有重复观察的数据,有时在两个元素上匹配,但在第三个元素上不同,有时仅在第一个元素上匹配。例如:
// matches
["children", "0", "children", "1" ]
对于在前两列匹配的每个观察值(例如,此处的名称和运动),我只想保留时间值最大的观察值。对于仅与第一列匹配的内容(例如名称),我想保持原样。例如:
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
我该怎么做?
答案 0 :(得分:0)
一个建议,而不是您的建议:
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语法更易于阅读