R如何比较两列重复项

时间:2019-02-25 20:07:08

标签: r compare

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

// 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

我该怎么做?

1 个答案:

答案 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语法更易于阅读