#r #list #count #rank
#r #Список #количество #ранг
Вопрос:
Например, у меня есть набор данных, который выглядит следующим образом
name | state
Smith NY
Anthony CA
James MA
Henry CA
Andrews NY
Helen CA
Smith NY
Smith NY
Anthony CA
Andrews NY
Richard MA
Richard MA
Richard MA
Anthony CA
Smith MA
Jeffries CA
Conrad NY
Hanes NY
James MA
Conrad NY
Conrad NY
Helen CA
В конце концов, я бы хотел чего-то подобного. Обратите внимание, что состояния упорядочены в алфавитном порядке. Обратите внимание, что имена с наибольшим внешним видом отображаются вверху, а имя со следующим внешним видом следует за ним. Я выбираю только первые два в каждой группе (состоянии), затем создаю, чтобы эти столбцы ссылались на их ранг и количество на основе расположения строк.
name| state| Rank | Count
Anthony CA 1 3
Anthony CA 1 3
Anthony CA 1 3
Helen CA 2 2
Helen CA 2 2
Richard MA 1 3
Richard MA 1 3
Richard MA 1 3
James MA 2 2
James MA 2 2
Smith NY 1 3
Smith NY 1 3
Smith NY 1 3
Conrad NY 1 3
Conrad NY 1 3
Conrad NY 1 3
Комментарии:
1. по количеству появлений для строки в состоянии. Энтони для Калифорнии равен 1, а Хелен равна 2, потому что Энтони отображается в необработанном наборе данных в трех строках.
Ответ №1:
Возможно, это помогает
library(dplyr)
df1 %>%
add_count(name, state) %>%
group_by(state) %>%
mutate(Rank = dense_rank(-n)) %>%
arrange(state, Rank) %>%
filter(Rank %in% 1:2)
# A tibble: 18 x 4
# Groups: state [3]
name state n Rank
<chr> <chr> <int> <int>
1 Anthony CA 3 1
2 Anthony CA 3 1
3 Anthony CA 3 1
4 Helen CA 2 2
5 Helen CA 2 2
6 Richard MA 3 1
7 Richard MA 3 1
8 Richard MA 3 1
9 James MA 2 2
10 James MA 2 2
11 Smith NY 3 1
12 Smith NY 3 1
13 Smith NY 3 1
14 Conrad NY 3 1
15 Conrad NY 3 1
16 Conrad NY 3 1
17 Andrews NY 2 2
18 Andrews NY 2 2
данные
df1 <- structure(list(name = c("Smith", "Anthony", "James", "Henry",
"Andrews", "Helen", "Smith", "Smith", "Anthony", "Andrews", "Richard",
"Richard", "Richard", "Anthony", "Smith", "Jeffries", "Conrad",
"Hanes", "James", "Conrad", "Conrad", "Helen"), state = c("NY",
"CA", "MA", "CA", "NY", "CA", "NY", "NY", "CA", "NY", "MA", "MA",
"MA", "CA", "MA", "CA", "NY", "NY", "MA", "NY", "NY", "CA")),
class = "data.frame", row.names = c(NA,
-22L))