我想使用数据框中其他位置的信息创建一个新变量。这似乎很简单,但是我想按比例分配新变量的级别。
我有一个数据框:
dd<-read.table(text="
group piece answer
group1 A noise
group1 A silence
group1 A silence
group1 B silence
group1 B loud_noise
group1 B noise
group1 B loud_noise
group1 B noise
group2 C silence
group2 C silence", header=TRUE)
我想创建一个具有两个级别的新变量“ majority_annotation”:好和坏。好的表示每件作品都具有多数同意书(> 55%)。不良意味着该片没有多数答复协议。
group piece answer majority_agreement
group1 A noise good
group1 A silence good
group1 A silence good
group1 B silence bad
group1 B loud_noise bad
group1 B noise bad
group1 B loud_noise bad
group1 B noise bad
group2 C silence good
group2 C silence good
我可以按二进制方式(全部或不同意)执行此操作:
newdf <- df %>%
group_by(group) %>%
mutate(majority_agreement = ifelse(length(unique(answer)) <= 1,
'good',
ifelse(length(unique(answer) > 1) &
(length(unique(answer)) >= 2), 'bad', 'bad'))) %>%
as.data.frame
我如何按比例进行呢?
答案 0 :(得分:2)
这似乎可以使用dplyr
library(dplyr)
dd %>%
group_by(piece) %>%
mutate(majority_agreement = if_else(max(table(answer)/n())>.55, "good", "bad"))
在每个“片段”中,我们使用table()
来计数不同响应的数量,然后将其除以n()
以得到每个响应的比例。我们查看最大比例是否大于.55。如果是,我们给标签“好”,否则给标签“坏”
答案 1 :(得分:1)
npc