在R语言中根据Case_ID条件为字符串变量添加指定子串
在R中按规则给Question字段拼接相关性标识
需求说明
根据Case_ID和Question的组合,给Question字符串末尾添加对应相关性标识:
- 当
Case_ID为1234时:QS1拼接"02",QS2、QS3拼接"00" - 当
Case_ID为4321时:QS1拼接"00",QS2拼接"01",QS3拼接"02"
输入数据构造
先构造示例输入数据:
# 构造输入数据框 input_df <- data.frame( Case_ID = c(1234, 4321, 1234, 1234, 4321, 4321), Question = c("QS1", "QS1", "QS3", "QS2", "QS3", "QS2"), stringsAsFactors = FALSE )
实现方法
方法1:使用dplyr包(逻辑清晰,推荐)
加载dplyr包后,用case_when定义多条件规则,再通过paste0拼接字符串:
library(dplyr) output_df <- input_df %>% mutate( Question = paste0( Question, case_when( Case_ID == 1234 & Question == "QS1" ~ "02", Case_ID == 1234 & (Question == "QS2" | Question == "QS3") ~ "00", Case_ID == 4321 & Question == "QS1" ~ "00", Case_ID == 4321 & Question == "QS2" ~ "01", Case_ID == 4321 & Question == "QS3" ~ "02" ) ) )
方法2:基础R实现(无需额外包)
用嵌套ifelse完成条件判断,搭配paste0拼接字符串:
output_df <- input_df output_df$Question <- paste0( output_df$Question, ifelse(output_df$Case_ID == 1234, ifelse(output_df$Question == "QS1", "02", "00"), ifelse(output_df$Question == "QS1", "00", ifelse(output_df$Question == "QS2", "01", "02")) ) )
输出结果
运行上述代码后,得到的输出数据如下:
| Case_ID | Question |
|---|---|
| 1234 | QS102 |
| 4321 | QS100 |
| 1234 | QS300 |
| 1234 | QS200 |
| 4321 | QS302 |
| 4321 | QS201 |
内容的提问来源于stack exchange,提问作者C K
相关产品推荐
相关产品推荐

