获取R中 Dataframe 内每组值的唯一值的频率

x6yk4ghg  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(78)

我试图减少一个 Dataframe ,以获得分组值的频率。
下面是一个例子,我的dataframe(说df 1)看起来像-

col1    col2    col3
A   X1  H1
A   X1  H1
A   X1  H2
A   X2  H3
A   X2  H3
B   X1  H1
B   X2  H2
B   X2  H3
B   X2  H3
B   X3  H4
B   X4  H5

字符串
我想得到的结果是

col1 col2 col3
A   5   2   3
B   6   4   5


为了进一步解释预期结果,第一列应该具有df1$col1中唯一值的频率,第二列应该具有df1$col1中每个组的唯一值的数量,第三列应该具有df1$col1中每个组的唯一值的数量。
到目前为止,我有这段代码-

col1_count<-df1 %>% count(col1)
col2_count<-df1 %>% count(col1,col2)
col3_count<-df1 %>% count(col1,col2,col3)

merged_col1_col2<-full_join(col1_count,col2_count)


不幸的是,它没有给我我需要的,我有点困惑如何从这里去。任何帮助将不胜感激。

jhdbpxl9

jhdbpxl91#

您可以:

library(dplyr)

df1 |> 
  summarise(col1 = n(),
            across(col2:col3, n_distinct), .by = col1)

# A tibble: 2 × 3
   col1  col2  col3
  <int> <int> <int>
1     5     2     3
2     6     4     5

字符串
如果您想保留原始组值,请在汇总之前复制一份:

df1 |> 
  mutate(grp = col1) |> 
  summarise(col1 = n(),
            across(col2:col3, n_distinct), .by = grp)

# A tibble: 2 × 4
  grp    col1  col2  col3
  <chr> <int> <int> <int>
1 A         5     2     3
2 B         6     4     5

相关问题