我正在对数据进行分组,然后对其进行汇总,但也希望保留另一列。我不需要对该列的内容进行任何评估,因为它总是与group_by列相同。我可以将它添加到group_by语句中,但似乎并没有#34;正确"。我希望在State.Full.Name
分组后保留State
。感谢
TDAAtest <- data.frame(State=sample(state.abb,1000,replace=TRUE))
TDAAtest$State.Full.Name <- state.name[match(TDAAtest$State,state.abb)]
TDAA.states <- TDAAtest %>%
filter(!is.na(State)) %>%
group_by(State) %>%
summarize(n=n()) %>%
ungroup() %>%
arrange(State)
答案 0 :(得分:16)
也许我们需要
TDAAtest %>%
filter(!is.na(State)) %>%
group_by(State) %>%
summarise(State.Full.Name = first(State.Full.Name), n = n())
或使用mutate
创建列,然后执行distinct
TDAAtest %>% f
filter(!is.na(State)) %>%
group_by(State) %>%
mutate(n= n()) %>%
distinct(State, .keep_all=TRUE)
答案 1 :(得分:0)
我相信有比接受的答案更准确的答案,特别是当您没有每组中其他列的唯一数据时(例如,基于一个特定列的最大或最小或前 n 个项目 ).
尽管已接受的答案适用于这个问题,例如,您希望找到每个州人口最多的县。 (您需要有 county
和 population
列)。
我们有以下选择:
1. dplyr 版本
从 this link 开始,您需要三个额外的操作(mutate
、ungroup
和 filter
)来实现:
TDAAtest %>%
filter(!is.na(State)) %>%
group_by(State) %>%
mutate(maxPopulation = max(Population)) %>%
ungroup() %>%
filter(maxPopulation == Population)
2.功能版本
这个给你尽可能多的灵活性,你可以对每个组应用任何类型的操作:
maxFUN = function(x) {
# order population in a descending order
x = x[with(x, order(-Population)), ]
x[1, ]
}
TDAAtest %>%
filter(!is.na(State)) %>%
group_by(State) %>%
do(maxFUN(.))
强烈建议将此用于更复杂的操作。例如,您可以通过为 topN
中返回的数据框设置 x[1:topN]
来返回每个州的前 n (maxFUN
) 个县。