Car*_*rbo 4 group-by r dplyr summarize
我有以下数据集:
a b
1 a
1 a
1 a
1 none
2 none
2 none
2 b
3 a
3 c
3 c
3 d
4 a
Run Code Online (Sandbox Code Playgroud)
我想获取任何 a 的 b 中最频繁的值以及任何 a 的 b 的第二频繁值。如果 b 中的两个值具有相同的频率,我对这两个值中的任何一个被视为“第一”或“第二”不关心。
在这种情况下,预期输出将是:
d2:
a first second
1 a none
2 none b
3 c a(or d, doesn't matter)
4 a NA
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,a=4 在 b 中只有一个值,因此我预计输出列“第二”中为 NA,因为没有第二个最常见的值。
数据:
a <- c(1,1,1,1,2,2,2,3,3,3,3,4)
b<- c("a","a", "a", "none", "none", "none", "b", "a", "c" , "c", "d","a")
d <- data.frame(a,b)
Run Code Online (Sandbox Code Playgroud)
我现在尝试的是以下内容
d1 <- d %>% group_by(a) %>% summarize ( first =names(which.max(table(b))) , second= names(which.max(table(b)[-which.max(table(b))] )))
Run Code Online (Sandbox Code Playgroud)
但它无法正常工作,您知道如何做到这一点吗?
您可以count选择行数a和b组合,并为a中的每个值选择第一个和第二个值summarise。
library(dplyr)
d %>%
count(a, b, sort = TRUE) %>%
group_by(a) %>%
summarise(first = b[1],second = b[2])
# A tibble: 4 x 3
# a first second
# <dbl> <chr> <chr>
#1 1 a none
#2 2 none b
#3 3 c a
#4 4 a NA
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |