data.frame에서 가장 빈번한 요소 [중복]

Aug 20 2020

내 샘플 데이터를 아래에서 찾으십시오. '가장 빈번한'열에서 가장 빈번한 번호를 식별하고 싶습니다.

structure(list(name = c("act1_25", "act1_26", "act1_27", "act1_28", 
    "act1_29", "act1_30", "act1_31", "act1_32", "act1_33", "act1_34", 
    "act1_35", "act1_36", "act1_37", "act1_38", "act1_39", "act1_40", 
    "act1_41", "act1_42", "act1_43", "act1_44", "act1_45", "act1_46", 
    "act1_47", "act1_48", "serial"), `Most frequent` = c("111,110,9120,310,3110,210,1110", 
    "210,3110,110,310,9120,9210,8210,3819,1110,111", "210,110,310,8210,3110,1110", 
    "210,9120,110,310,8210,1110,3819", "210,9120,310,110,1110,111", 
    "9120,110,1110,3830", "110,1110,3210,310", "210,110,1110,8210,310", 
    "1110,310,8210,110", "210,310,1110,8210,110", "310,1110,8210,210,110", 
    "3210,9120,1110,8210,110", "1110,210,310,110,3830", "1110,210,310,110,3210,3830", 
    "1110,8210,110,3830,3210", "1110,310,110,3210,5190", "1110,110,5190", 
    "1110,3210,3830,310,8210,110,5190", "1110,8210,310,210,1120,110", 
    "1110,8210,310", "1110,8210,310", "1110,8210,310,110", "1110,8210,310,110", 
    "210,1110,8210,5190,110", "27080618")), class = c("tbl_df", "tbl", 
    "data.frame"), row.names = c(NA, -25L))

Example of Output

Most frequent: 110

답변

2 Duck Aug 20 2020 at 20:30

나는 tidyverse접근 방식 을 제안합니다 .

library(tidyr)
library(dplyr)
#Separate rows
df %>% separate_rows(`Most frequent`,2,sep = ',') %>%
  group_by(`Most frequent`) %>%
  summarise(N=n()) %>% arrange(desc(N))

산출:

   Most frequent  N
1           1110 24
2            110 22
3            310 19
4           8210 16
5            210 12
6           3210  6
7           9120  6
8           3830  5
9           5190  4
10           111  3
11          3110  3
12          3819  2
13          1120  1
14      27080618  1
15          9210  1

@AllanCameron 결과와 유사합니다.

3 AllanCameron Aug 20 2020 at 20:27

넌 할 수있어

names(which.max(table(unlist(strsplit(df$`Most frequent`, ",")))))
#> [1] "1110"

또는 실제 개수와 함께 값을 원한다면 다음을 수행 할 수 있습니다.

rev(sort(table(unlist(strsplit(df$`Most frequent`, ",")))))[1]
#> 1110 
#>   24 

110 개의 항목이 22 개 항목 인 것과 비교하여 1110 개의 항목이 실제로 24 개 있음을 알 수 있습니다.

rev(sort(table(unlist(strsplit(df$`Most frequent`, ",")))))
#>    1110      110      310     8210      210     9120     3210     3830 
#>      24       22       19       16       12        6        6        5 
#>    5190     3110      111     3819     9210 27080618     1120 
#>       4        3        3        2        1        1        1 
1 iamericfletcher Aug 20 2020 at 20:43
df <- structure(list(name = c("act1_25", "act1_26", "act1_27", "act1_28", 
    "act1_29", "act1_30", "act1_31", "act1_32", "act1_33", "act1_34", 
    "act1_35", "act1_36", "act1_37", "act1_38", "act1_39", "act1_40", 
    "act1_41", "act1_42", "act1_43", "act1_44", "act1_45", "act1_46", 
    "act1_47", "act1_48", "serial"), `Most frequent` = c("111,110,9120,310,3110,210,1110", 
    "210,3110,110,310,9120,9210,8210,3819,1110,111", "210,110,310,8210,3110,1110", 
    "210,9120,110,310,8210,1110,3819", "210,9120,310,110,1110,111", 
    "9120,110,1110,3830", "110,1110,3210,310", "210,110,1110,8210,310", 
    "1110,310,8210,110", "210,310,1110,8210,110", "310,1110,8210,210,110", 
    "3210,9120,1110,8210,110", "1110,210,310,110,3830", "1110,210,310,110,3210,3830", 
    "1110,8210,110,3830,3210", "1110,310,110,3210,5190", "1110,110,5190", 
    "1110,3210,3830,310,8210,110,5190", "1110,8210,310,210,1120,110", 
    "1110,8210,310", "1110,8210,310", "1110,8210,310,110", "1110,8210,310,110", 
    "210,1110,8210,5190,110", "27080618")), class = c("tbl_df", "tbl", 
    "data.frame"), row.names = c(NA, -25L))

library(dplyr)
library(tidyr)

df %>% 
  #//separate Most frequent using , as the separator 
  separate_rows(`Most frequent`, sep = ",") %>%
  #//count the unique values of the Most Frequent variable with results in new column named frequency
  count(`Most frequent`, name = "frequency") %>% 
  #//arrange frequency column in descending order
  arrange(desc(frequency))

#> # A tibble: 15 x 2
#>    `Most frequent` frequency
#>    <chr>               <int>
#>  1 1110                   24
#>  2 110                    22
#>  3 310                    19
#>  4 8210                   16
#>  5 210                    12
#>  6 3210                    6
#>  7 9120                    6
#>  8 3830                    5
#>  9 5190                    4
#> 10 111                     3
#> 11 3110                    3
#> 12 3819                    2
#> 13 1120                    1
#> 14 27080618                1
#> 15 9210                    1