group_by,获得最频繁和第二频繁
group_by, get most frequent and second most frequent
我有以下数据集:
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
我想为任何 a 获取 b 中最频繁出现的值,为任何 a 获取 b 中第二频繁出现的值。如果 b 中的两个值具有相同的频率,我对被认为是 "first" 或 "second".
中的任何一个都无动于衷
在这种情况下,预期输出为:
d2:
a first second
1 a none
2 none b
3 c a(or d, doesn't matter)
4 a NA
如您所见,a=4 在 b 中只有一个值,因此我希望输出列中有一个 NA "second",因为没有第二个最常见的值。
数据:
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)
我目前尝试的是以下
d1 <- d %>% group_by(a) %>% summarize ( first =names(which.max(table(b))) , second= names(which.max(table(b)[-which.max(table(b))] )))
但它无法正常工作,知道如何操作吗?
您可以 count
a
和 b
组合的行数以及 a
select 中的第一个和第二个值的每个值 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
这里有一个选项data.table
library(data.table)
setDT(d)[, .N, .(a, b)][order(N), .(first = first(b), second = b[2]), a]
我有以下数据集:
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
我想为任何 a 获取 b 中最频繁出现的值,为任何 a 获取 b 中第二频繁出现的值。如果 b 中的两个值具有相同的频率,我对被认为是 "first" 或 "second".
中的任何一个都无动于衷在这种情况下,预期输出为:
d2:
a first second
1 a none
2 none b
3 c a(or d, doesn't matter)
4 a NA
如您所见,a=4 在 b 中只有一个值,因此我希望输出列中有一个 NA "second",因为没有第二个最常见的值。
数据:
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)
我目前尝试的是以下
d1 <- d %>% group_by(a) %>% summarize ( first =names(which.max(table(b))) , second= names(which.max(table(b)[-which.max(table(b))] )))
但它无法正常工作,知道如何操作吗?
您可以 count
a
和 b
组合的行数以及 a
select 中的第一个和第二个值的每个值 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
这里有一个选项data.table
library(data.table)
setDT(d)[, .N, .(a, b)][order(N), .(first = first(b), second = b[2]), a]