R语言如何按条件拼接数据框state与country列的字符串
问题原因
你的代码出现异常和警告的核心原因是赋值左右两侧长度不匹配:
- 左侧
FDI$state[!(FDI$state=="Not Specified")]筛选出来的是仅符合条件的行,长度远小于全表行数 - 右侧
do.call(paste, c(FDI[c], sep = ", "))生成的是和全表行数一致的字符串向量,R会自动循环右侧向量填充左侧,导致不该修改的行被错位覆盖,同时抛出长度不匹配的警告。
另外你代码里的FDI[c]写法也存在问题,c未定义,无法正确选中需要拼接的列。
正确实现方法
1. 基础R实现
# 先定位需要修改的行(如果需要兼容state为NA的场景,可补充!is.na(FDI$state)判断) modify_idx <- FDI$state != "Not Specified" # 仅对符合条件的行做拼接赋值,左右两侧长度完全匹配 FDI$state[modify_idx] <- paste(FDI$state[modify_idx], FDI$country[modify_idx], sep = ", ")
2. dplyr实现(更简洁直观)
library(dplyr) FDI <- FDI %>% mutate(state = ifelse( state != "Not Specified", paste(state, country, sep = ", "), state # 不符合条件的行保留原值 ))
内容的提问来源于stack exchange,提问作者nflore
相关产品推荐
相关产品推荐

