在这里开始R程序员。
我有一个名为'narc'的数据框,记录了40个测量自恋的不同问题的答案。
看起来像这样:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16
1723 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7231 2 2 2 1 1 2 1 1 2 2 2 2 2 2 1 2
5556 2 2 2 1 2 2 2 1 1 2 2 1 2 2 1 1
1511 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2080 1 1 2 2 1 1 2 2 2 1 1 2 1 2 1 1
1074 2 2 1 1 2 2 2 1 1 1 1 1 2 2 1 2
Q17 Q18 Q19 Q20 Q21 Q22 Q23 Q24 Q25 Q26 Q27 Q28 Q29 Q30
1723 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7231 1 2 2 1 2 1 1 2 2 1 1 1 2 2
5556 1 1 1 1 1 2 1 2 2 1 2 1 2 1
1511 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2080 1 1 1 1 2 1 2 1 1 1 2 1 1 1
1074 2 1 1 1 1 1 2 2 2 1 1 1 2 2
Q31 Q32 Q33 Q34 Q35 Q36 Q37 Q38 Q39 Q40 elapse gender age
1723 0 0 0 0 0 0 0 0 0 0 8 1 23
7231 2 1 1 1 1 2 2 2 2 1 24 1 21
5556 2 1 1 2 1 1 2 2 2 1 33 2 18
1511 2 2 2 2 2 2 2 2 2 2 51 1 16
2080 2 2 1 1 2 1 1 2 2 2 59 1 20
1074 1 1 1 1 1 2 2 1 2 1 60 1 24
score level
1723 0 not
7231 8 not
5556 11 not
1511 17 mildly
2080 21 moderately
1074 14 not
我还有一个名为'narc.key'的数据框,其答案与自恋相对应,它看起来像这样:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17
1 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1 2
Q18 Q19 Q20 Q21 Q22 Q23 Q24 Q25 Q26 Q27 Q28 Q29 Q30 Q31 Q32
1 2 2 2 1 2 2 1 1 2 1 2 1 1 1 2
Q33 Q34 Q35 Q36 Q37 Q38 Q39 Q40
1 1 1 2 1 1 1 1 2
我想找出哪个问题的自恋答案最多。
我解决这个问题的方法是创建一个值向量来记录每列匹配narc.key的行数。但是,我在如何做到这一点上遇到了一些麻烦。到目前为止,这是我的代码:
for (i in 1:nrow(narc)){
}
for(x in 1:40){
highest.score<-narc[i]
for(y in 1:40)
if(narc[i,y]==narc.key[1,y]){
我很难绕着下一步做什么。 请帮帮忙?
答案 0 :(得分:2)
这并不奇怪,但您可以创建与问题大小相同的答案数据集,并使用==
(假设您的数据集不是很大,这应该不会太慢)
qs <- read.table(header = TRUE, text="Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 2 2 1 1 2 1 1 2 2 2 2 2 2 1 2
2 2 2 1 2 2 2 1 1 2 2 1 2 2 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
1 1 2 2 1 1 2 2 2 1 1 2 1 2 1 1
2 2 1 1 2 2 2 1 1 1 1 1 2 2 1 2")
ans <- read.table(header = TRUE, text=" Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16
1 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1")
ans[1:nrow(qs), ] <- ans[1, ]
# Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16
# 1 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1
# 2 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1
# 3 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1
# 4 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1
# 5 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1
# 6 1 1 1 2 2 1 2 1 2 2 1 1 1 1 2 1
然后对列进行总结:
colSums(qs == ans)
# Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16
# 1 1 1 2 3 1 4 3 3 3 2 2 1 0 1 2
答案 1 :(得分:0)
编辑:我误解了需求。这个答案表明哪些问题作为最常见的答案,是一个答案。不是哪个问题的答案数量最多。
这是一种方式。该库是如此,我可以使用管道,使其更容易遵循。我有一个40列,10行的矩阵 - 所有随机选择为0,1或2.我使用apply
函数,跨列,并列表响应。然后,我应用于列表的每个元素(每列有40个,每个一个)函数which.max
,它将返回表中最高值的索引。然后,我应用于每个列表元素(同样,40)并询问names
返回的值的which.max
,这将给出具有最高计数的响应。最后,我unlist
并将它们转换为整数(否则它们是文本)。这可以与narc键进行比较,以查看哪些答案匹配。
library(magrittr)
mat = matrix(sample(c(0,1,2),400,replace=T),ncol=40)
output = mat %>%
apply(2,table) %>%
lapply(which.max) %>%
lapply(names) %>%
unlist() %>%
as.integer()
narc.key == output
这种意想不到的结果是,如果最常见的是并列,你可能会得到第一个答案,而不是两者。