我有一个数据,参与者看到面孔,必须按下7个按钮中的一个(每个按钮对应一种情绪),这给我留下了这样的数据:
X...Emotion Intensity Response Correct Button.RB
1 Anger 40% Sad Incorrect 5
2 Sad 100% Sad Correct 5
3 Happy 50% Happy Correct 4
4 Anger 100% Anger Correct 1
5 Fear 100% Fear Correct 3现在,我想要计算每种情绪的正确按钮按下的百分比和不正确的总百分比,以及某人犯的错误的种类(例如,对于“愤怒的脸”,有35%的错误反应,其中7.5%是‘悲伤’的按钮按下,22.5%是‘中性’的按钮按下等等……)
我想出了如何获得每个情绪的个体计数和正确/不正确:
count(df_fert, vars = c('X...Emotion','Correct'))它为我提供了:
X...Emotion Correct freq
1 Anger Correct 26
2 Anger Incorrect 14
3 Disgust Correct 11
4 Disgust Incorrect 29有没有人知道我想要的计算百分比的方法?以及如何在响应类型中“细分”不正确的响应?
发布于 2017-08-17 21:04:12
很高兴看到你自己解决了这个问题。我尝试了一下,下面是我是如何做到的:
数据设置
# Setup
set.seed(1110)
Emot = c("Sad", "Happy", "Angry", "Fear", "Joy", "Neutral")
Emotion = sample(x = Emot, size = 50, replace = T)
Response = sample(x = Emot, size = 50, replace = T)
df = data.frame(Emotion,Response)
df$Correct = ifelse(Emotion==Response, "Correct", "Incorrect")这提供了:
> head(df,10)
Emotion Response Correct
1 Angry Joy Incorrect
2 Joy Neutral Incorrect
3 Neutral Neutral Correct
4 Fear Happy Incorrect
5 Happy Neutral Incorrect
6 Sad Happy Incorrect
7 Angry Angry Correct
8 Neutral Sad Incorrect
9 Fear Fear Correct
10 Angry Happy Incorrect计数
要通过情感和反应的配对组合计算答案,请执行以下操作:
# Counting by Emotion and Response
df2 = aggregate(data = df, Correct ~ Emotion + Response, FUN = length)这提供了:
> head(df2,10)
Emotion Response Correct
1 Angry Angry 1
2 Happy Angry 1
3 Joy Angry 1
4 Neutral Angry 1
5 Sad Angry 4
6 Angry Fear 1
7 Fear Fear 1
8 Happy Fear 1
9 Joy Fear 2
10 Neutral Fear 2百分比
要计算所有情绪和每种类型响应的正确百分比和错误百分比,请执行以下操作:
library(reshape2)
results = dcast(df2, Emotion ~ Response, value.var = "Correct")
results[is.na(results)] = 0
results[,-1] = round( results[,-1]/rowSums(results[,-1])*100, digits = 2)这提供了:
> results
Emotion Angry Fear Happy Joy Neutral Sad
1 Angry 9.09 9.09 18.18 27.27 27.27 9.09
2 Fear 0.00 16.67 33.33 16.67 16.67 16.67
3 Happy 20.00 20.00 0.00 40.00 20.00 0.00
4 Joy 12.50 25.00 12.50 12.50 12.50 25.00
5 Neutral 9.09 18.18 27.27 0.00 18.18 27.27
6 Sad 44.44 0.00 11.11 22.22 22.22 0.00例如:愤怒情绪被正确点击了9.09%,而它被错误地点击为快乐18.18%。
发布于 2017-08-17 20:32:15
我用下面的代码修复了这个问题:
freq <- count(df_fert, vars = c('X...Emotion','Response','Correct'))
freq$perc <- (freq$freq/40)*100https://stackoverflow.com/questions/45734697
复制相似问题