r - 如何连续替换重复的问题/值
问题描述
我即将展开一张表格,但是我的数据遇到了问题。数据基于问卷调查,问题在第一列,答案在下一列。该数据文件包含大约 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
解决方案
如果有不止一行,我们可以group_by
Participant
and Question
and 追加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)
推荐阅读
- swift - iOS 13 模拟器:reverseGeocodeLocation - [GEOAddressObject] [NSLocale currentLocale] 对 NSLocaleCountryCode@ 失败
- c++ - ::clock 尚未声明
- laravel - 如何获取在线用户(实时)
- unit-testing - Delta Control 中的 KDB+ Q 单元测试分析代码
- node.js - 当浏览器重新加载时,所有对话都被清除了。我需要在 bot 框架节点 js 中重新开始旧对话
- reactjs - 如何重置反应钩子状态?
- c# - 如何在 selenium c# 中运行多个 chrome 配置文件?
- php - php - 使用 PHP/MySQL 查询数据的手风琴内容
- javascript - 单击提交按钮 - 快速打开和关闭弹出警报
- c - 函数类型更改时出现“错误:(1098)冲突声明”