我如何总结 r

时间:2021-03-12 10:38:52

标签: r for-loop apply

我有一个表 (df),其中分类变量作为不同级别的因素

<头>
A_ID B_ID C_ID
有效号码 有效号码 无效号码
有效号码 有效号码 无效号码
无效号码 无效号码 太过分了
太过分了 太过分了 太过分了
有效号码 太长了 太过分了
太长了 太长了 有效号码
无效号码 有效号码 太长了
太长了 无效号码 太长了
太短 太短 有效号码
太短 有效号码 太长了
太长了 无效号码 太长了
有效号码 无效号码 有效号码

我想根据每列的级别数来汇总,例如,我想统计每列中每个级别出现的次数,结果应该如下表

<头>
变量 Count_valid Count_Invalid Count_Short Count_Long
A_ID 3 2 3 3
B_ID 4 4 2 2
C_ID 3 2 3 4

我尝试过使用应用功能:

t(sapply(names(df), function(x) 
  c(count_Valid=count(df[x])== "valid value", 
    count_Invalid=count(df[x]) == "invalid value", 
    count_Short=count(df[x] == "too short", 
    count_Long=count(df[x] == "too long")))))

1 个答案:

答案 0 :(得分:1)

这行得通吗:

library(dplyr)
library(tidyr)    
df %>% pivot_longer(cols = everything()) %>% count(name, value) %>% 
   pivot_wider(id_cols = name, names_from = value, values_from = n) %>% 
   select('Variable' = name, 'Count_valid' = `valid number`, 'Count_Invalid' = `invalid number`, 'Count_Short' = `too short`, 'Count_long' = `too long`)
# A tibble: 3 x 5
  Variable Count_valid Count_Invalid Count_Short Count_long
  <chr>          <int>         <int>       <int>      <int>
1 A_ID               4             2           3          3
2 B_ID               4             4           2          2
3 C_ID               3             2           3          4

使用的数据:

df
# A tibble: 12 x 3
   A_ID           B_ID           C_ID          
   <chr>          <chr>          <chr>         
 1 valid number   valid number   invalid number
 2 valid number   valid number   invalid number
 3 invalid number invalid number too short     
 4 too short      too short      too short     
 5 valid number   too long       too short     
 6 too long       too long       valid number  
 7 invalid number valid number   too long      
 8 too long       invalid number too long      
 9 too short      too short      valid number  
10 too short      valid number   too long      
11 too long       invalid number too long      
12 valid number   invalid number valid number  
相关问题