R语言gsub移除数据框列换行符结果映射错误如何解决?
问题根源
你的代码出错核心是R数据框的索引用法错误:
- 用单中括号
df00[1]取第一列时,返回的是仅包含第一列的子数据框(tibble对象),不是可以逐元素处理的原子向量。 gsub()接收到数据框输入时,不会逐行处理列内容,而是会把整个子数据框转成单个字符串(就是你看到的带c(前缀的整列拼接内容),再把这个单字符串循环赋值给所有行,最终导致所有行内容重复、映射完全错乱。
修正方案
取单列做文本处理时,要使用能返回原子向量的索引方式,两种写法都可以:
写法1:按列名索引(推荐,可读性强)
因为列名Room type带空格,索引时需要用反引号包裹列名:
df00_dup <- df00 df00_dup$RoomInfo <- gsub("[\r\n]", "", df00_dup$`Room type`)
写法2:按列位置索引
不需要写列名,直接用双中括号取第一列即可:
df00_dup <- df00 df00_dup$RoomInfo <- gsub("[\r\n]", "", df00_dup[[1]])
效果说明
运行上述代码后:
RoomInfo列和原Room type列逐行一一对应,不会出现行错位- 列内所有
\r回车、\n换行符会被完全移除 - 不会再出现
c(开头的错误格式内容
内容的提问来源于stack exchange,提问作者user3115933
相关产品推荐
相关产品推荐

