我有这个DF(部分显示)在第一列有15个类别,每个单元格的数字在1到15之间。实际上这只是一个小例子,15个类别在其他列中重复不同的数字< / p>
我需要的是有一个16x15的矩阵,其中包含值的出现次数。
我可以用IFs等旧方式对此进行编程,但我很遗憾地使用R
我希望这很清楚。
欢迎任何建议
按要求编辑(道歉不明确)
RESULTADOS DF
PREOCUPACIÓN 13 15 4 4 1 8 3 1
TRISTEZA 15 13 2 5 4 14 6 6
PERDIDA 4 11 3 2 14 12 7 10
ANGUSTIA 14 10 11 3 2 13 1 2
IMPOTENCIA 1 8 9 6 5 5 5 4
MUERTE 2 1 14 14 15 6 13 15
ENOJO 12 7 10 8 6 7 12 5
INJUSTICIA 3 9 12 7 12 2 14 13
AUSENCIA 11 14 6 1 8 11 11 11
DOLOR 5 12 5 9 7 15 8 8
CORRUPCIÓN 8 6 15 13 11 3 15 12
MIEDO 9 3 13 10 3 10 9 3
SECUESTRO 10 2 1 11 9 4 4 14
INSEGURIDAD 7 4 7 15 10 1 10 9
DESESPERACIÓN 6 5 8 12 13 9 2 7
PREOCUPACIÓN 14 2 5 4 3 8 8 7
TRISTEZA 5 7 1 8 7 9 13 9
PERDIDA 2 6 6 12 2 10 6 10
ANGUSTIA 13 3 15 9 8 11 7 4
IMPOTENCIA 12 11 7 5 10 12 12 1
MUERTE 3 10 14 2 13 13 9 2
ENOJO 11 5 10 10 11 7 11 5
INJUSTICIA 7 13 2 6 15 14 10 6
AUSENCIA 8 1 9 11 1 6 4 12
DOLOR 6 8 8 13 9 3 3 3
CORRUPCIÓN 10 15 3 14 14 15 5 11
MIEDO 9 4 13 15 4 4 14 8
SECUESTRO 4 9 11 1 12 5 15 13
INSEGURIDAD 1 12 4 7 6 1 1 14
DESESPERACIÓN 15 14 12 3 5 2 2 15
PREOCUPACIÓN 13 10 4 1 7 4 11 2
TRISTEZA 15 11 11 2 9 3 12 8
PERDIDA 2 15 7 4 15 7 3 13
ANGUSTIA 8 13 5 3 6 1 7 1
IMPOTENCIA 10 4 8 5 12 10 13 3
MUERTE 7 8 15 15 3 6 6 9
ENOJO 14 12 12 10 10 8 15 10
INJUSTICIA 4 1 13 6 1 9 2 6
AUSENCIA 12 9 1 7 8 11 1 14
DOLOR 9 14 2 12 5 2 14 12
CORRUPCIÓN 3 6 14 14 14 14 5 15
MIEDO 6 2 3 9 2 5 10 7
SECUESTRO 1 3 6 8 13 15 4 5
INSEGURIDAD 5 5 9 11 4 13 8 4
DESESPERACIÓN 11 7 10 13 11 12 9 11
...
我需要的结果是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
PREOCUPACION 3 2 2 5 1 0 2 3 0 1 1 0 2 0 1
TRISTEZA 1 2 1 1 2 2 2 2 3 0 2 1 1 1 2
答案 0 :(得分:0)
在每一行上使用 apply ,转换为 factor 并获取表:
res <-
cbind.data.frame(name = df1[, 1],
t(apply(df1[, -1], 1, function(i){
table(factor(i, levels = 1:15))
})))
res
# name 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 1 PREOCUPACIÓN 2 1 2 2 0 2 0 1 0 0 0 0 1 0 1
# 2 TRISTEZA 0 2 0 1 2 3 0 0 1 0 0 0 1 1 1
# 3 PERDIDA 0 1 1 1 0 0 1 0 0 1 2 2 1 2 0
# 4 ANGUSTIA 2 2 1 1 0 0 0 0 1 1 1 0 1 1 1
# ...
修改:如果您在多行上重复了名称,请尝试以下操作。在第1列拆分数据帧,然后遍历每个拆分数据帧并获得每个因子级别的计数。
res <- t(data.frame(
lapply(split(df1, df1$V1), function(i){
as.numeric(table(factor(unlist(i[-1, ]), levels = 1:15)))
})))
res
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
# ANGUSTIA 4 0 2 1 1 1 2 2 1 0 1 0 2 0 1
# AUSENCIA 4 2 0 1 0 1 1 2 2 0 2 2 0 1 0
# CORRUPCIÓN 0 0 4 0 2 1 0 0 0 1 1 0 0 6 3
# DESESPERACIÓN 0 2 1 2 1 0 1 0 1 1 3 2 1 1 2
# ...