다음은 복잡한 tidyverse
접근 방식입니다.
에
library(tidyverse) #for dplyr, purrr, tibble, tidyr
df <- tribble(
~name, ~abbr, ~itemGroup,
"abcd", "a", "g1",
"abcd", 'a', "g2",
"bcde", "b", "g1",
"bcde", "b", "g2",
"abcd", "a", "g3",
"abcd", "a", "g1",
"bcde", "b", "g2",
"bcde", "b", "g2",
"bcde", "b", "g2"
)
order <- count(df, name, abbr, itemGroup) %>%
group_by(itemGroup) %>%
summarize(n = sum(n)) %>%
arrange(desc(n)) %>%
pull(itemGroup)
df %>%
count(name, abbr, itemGroup) %>%
spread(itemGroup, n) %>%
left_join(group_by(df, name, abbr) %>%
summarize(total = n())) %>%
bind_rows(summarize_at(., vars(contains("g")), funs(sum), na.rm = TRUE) %>%
mutate(name = "TOTAL")) %>%
map_df(~replace(.x, is.na(.x), "")) %>%
arrange(desc(total)) %>%
select(name, abbr, one_of(order), total)
결과
# A tibble: 3 x 6
name abbr g2 g1 g3 total
<chr> <chr> <chr> <chr> <chr> <chr>
1 bcde b 4 1 5
2 abcd a 1 2 1 4
3 TOTAL 5 3 1
- 제 2 비트는 DF를 형성 한 후, 전체 행의 열 순서를 결정한다.
- 이것은 각 항목을 계산하여 열로 확산하고, 열 요약에 결합하고, 행 요약을 바인드하고,
NA
을 ""로 대체하고, 전체 열을 정렬하고 나머지 열의 적절한 순서를 선택합니다.
가! tidyverse가 mnormt에서 컴파일 오류로 인해 설치되지 않음 – Wanderer
컴파일러가 gforgran 및 gcc로 변경됨 5가 차이를 만들었습니다 – Wanderer
'outData $ total <-as.numeric을 제대로 처리하는 정렬 행을 얻으려면 한 걸음 더 가야했습니다. outData $ total)'outData <-outData %> %는 (desc (total))'을 다시 정렬합니다. 그렇지 않은 경우 999 개의 항목이있는 레코드가 10000 개의 항목보다 앞서있었습니다. – Wanderer