首页 > 解决方案 > 如何连续替换重复的问题/值

问题描述

我即将展开一张表格,但是我的数据遇到了问题。数据基于问卷调查,问题在第一列,答案在下一列。该数据文件包含大约 20000 份问卷,全部粘贴在彼此下方。

它看起来像这样:

*Participant*   |      *Question*      |        *Answer* 
Paul            |    Age               |         15
Paul            |    City              |      Amsterdam
Paul            |    Pet_name          |       Butterfly
Paul            |    Fav_color         |       Pink
Paul            |    Parent_name       |       Hank
Paul            |    Parent_name       |       Mary
Adam            |    Age               |         78
Adam            |    City              |         LA
Adam            |    Pet_name          |       Crocodile
Adam            |    Fav_color         |       Purple
Adam            |    Parent_name       |       Pete
Adam            |    Parent_name       |       Peter

问题是:当两个问题被称为相同时,我无法传播,在“Parent_name”的情况下。

所以最好我想替换第二次出现的 Parent_name,每个 Participant 就像 Parent2_name 或 Parent_name2

我试图做的是用duplicated()函数识别重复的值,但是,由于所有问题都是重复的,它只会将第二个参与者的所有内容标记为重复

要重新创建我的示例数据:

Participant <- c('Paul','Paul','Paul','Paul','Paul','Paul', 'Adam', 'Adam', 'Adam', 'Adam', 'Adam', 'Adam' )
Question <- c('Age', 'City', 'Pet_name', 'Fav_color', 'Parent_name', 'Parent_name', 'Age', 'City', 'Pet_name', 'Fav_color', 'Parent_name', 'Parent_name')
Answer <- c('15', 'Amsterdam', 'Butterfly', 'Pink', 'Hank', 'Mary', '78', 'LA', 'Crocodile', 'Purple', 'Pete', 'Peter')

df <- data.frame(Participant, Question, Answer)

所以最终产品看起来像:

*Participant*   |      *Question*      |        *Answer* 
Paul            |    Age               |         15
Paul            |    City              |      Amsterdam
Paul            |    Pet_name          |       Butterfly
Paul            |    Fav_color         |       Pink
Paul            |    Parent_name       |       Hank
Paul            |    Parent2_name      |       Mary
Adam            |    Age               |         78
Adam            |    City              |         LA
Adam            |    Pet_name          |       Crocodile
Adam            |    Fav_color         |       Purple
Adam            |    Parent_name       |       Pete
Adam            |    Parent2_name      |       Peter

标签: rreplaceduplicates

解决方案


如果有不止一行,我们可以group_by Participantand Questionand 追加row_number()to 。Question这适用于任何Question具有重复值的人。

library(dplyr)

df %>%
  group_by(Participant, Question) %>%
  mutate(Question1 = if (n() > 1) paste0(Question, row_number()) else Question) %>%
  ungroup %>%
  select(-Question)

#   Participant Answer    Question1   
#   <chr>       <chr>     <chr>       
# 1 Paul        15        Age         
# 2 Paul        Amsterdam City        
# 3 Paul        Butterfly Pet_name    
# 4 Paul        Pink      Fav_color   
# 5 Paul        Hank      Parent_name1
# 6 Paul        Mary      Parent_name2
# 7 Adam        78        Age         
# 8 Adam        LA        City        
# 9 Adam        Crocodile Pet_name    
#10 Adam        Purple    Fav_color   
#11 Adam        Pete      Parent_name1
#12 Adam        Peter     Parent_name2

数据

df <- data.frame(Participant, Question, Answer, stringsAsFactors = FALSE)

推荐阅读