在R中使用sub命令与管道运算符移除指定列中的字符
问题解决
你的代码失败是因为管道最后一步直接调用sub时,它会把整个数据框当成输入处理,而不是针对name1列做修改。要在管道里修改数据框的列,得用mutate来包裹sub操作。
另外注意你的列名是小写的x1/x2/x3,如果要移除的是大写X,可以加上忽略大小写的参数;如果目标就是小写x,直接匹配即可。下面是修正后的代码:
df <- data.frame(x1=c(20,3,2),x2=c(19,4,2), x3=c(20,3,2)) %>% pivot_longer(cols=x1:x3, names_to = "name1", values_to = "value1") %>% mutate(name1 = sub('x', '', name1, ignore.case = TRUE)) # 忽略大小写,同时匹配x或X
如果确定只需要移除大写X(比如你的列名实际是X1/X2/X3),可以去掉ignore.case = TRUE:
df <- data.frame(X1=c(20,3,2),X2=c(19,4,2), X3=c(20,3,2)) %>% pivot_longer(cols=X1:X3, names_to = "name1", values_to = "value1") %>% mutate(name1 = sub('X', '', name1))
这样处理后,name1列就只会保留数字部分,同时全程用管道串联操作,没有中间数据框。
内容的提问来源于stack exchange,提问作者wesleysc352
相关产品推荐
相关产品推荐

