多列的r表

elcex8rz  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(147)

我的数据集是这样的。

ID    Col_01    Col_02   Col_03    Col_04    Col_05    Col_06
   1     1         2        1         3         4         -9
   2     1         1        2         1         2          2
   3     2         4        1         1         1          1
   4     3         1        3         2        -9          4
   5     2         3        4         4         3          2

我喜欢创建一个汇总数据集,其中每列(Col_01-Col_06)中的1、2、3、4、-9的数量按如下方式计数。

Values    Col_01    Col_02   Col_03    Col_04    Col_05    Col_06   
    1         2         2        2         2         1         1
    2         2         1        1         1         1         2
    3         1         1        1         1         1         0
    4         0         1        1         1         1         1
   -9         0         0        0         0         1         1

目前为止我试过

df %>%
      select(matches(^Col_\\d+$")) %>%
       summarise_all(funs(table))

但我得到一个错误Col_05必须是大小为4或1,而不是5,因为早期列的大小为4。和一堆其他警告。任何建议,我可以如何创建表汇总所有列开始与Col_在我的数据集是赞赏,谢谢。

6yjfywim

6yjfywim1#

在R进制中你可以

table(stack(df1,-1))

如果需要 Dataframe :

as.data.frame matrix(table(stack(df1,-1)))
bxgwgixi

bxgwgixi2#

转得更长、更多,然后转得更宽是一种选择。

library(dplyr)
library(tidyr)

df1 %>% 
  pivot_longer(starts_with("Col_")) %>% 
  count(name, value) %>% 
  pivot_wider(names_from = name, 
              values_from = n, 
              values_fill = 0)

结果:

# A tibble: 5 × 7
  value Col_01 Col_02 Col_03 Col_04 Col_05 Col_06
  <int>  <int>  <int>  <int>  <int>  <int>  <int>
1     1      2      2      2      2      1      1
2     2      2      1      1      1      1      2
3     3      1      1      1      1      1      0
4     4      0      1      1      1      1      1
5    -9      0      0      0      0      1      1

数据:

df1 <- structure(list(ID = 1:5, Col_01 = c(1L, 1L, 2L, 3L, 2L), Col_02 = c(2L, 
1L, 4L, 1L, 3L), Col_03 = c(1L, 2L, 1L, 3L, 4L), Col_04 = c(3L, 
1L, 1L, 2L, 4L), Col_05 = c(4L, 2L, 1L, -9L, 3L), Col_06 = c(-9L, 
2L, 1L, 4L, 2L)), class = "data.frame", row.names = c(NA, -5L
))

相关问题