根据上一列中的值按比例填充新变量?

时间:2019-04-25 16:48:24

标签: r dplyr conditional mutate

我想使用数据框中其他位置的信息创建一个新变量。这似乎很简单,但是我想按比例分配新变量的级别。

我有一个数据框:

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

我如何按比例进行呢?

2 个答案:

答案 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