我有一个表 (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")))))
答案 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