替换数据帧中的字符串

rai*_*ner 5 replace r gsub dataframe

我正在尝试替换大型data.frame中的某个字符串.我刚刚找到以下解决方案,但gsub不保留原始data.frame布局.我怎样才能做到这一点.

我的意思是我想替换一个字符串,不想改变df的布局.

考虑这个例子:

test<-data.frame(a=c("a","b","c","d"),b=c("a","e","g","h"),c=c("i","j","k","a"))
gsub("a","new",test)
Run Code Online (Sandbox Code Playgroud)

谢谢

Jam*_*mes 14

您将需要lapply通过data.frame测试characterfactor输入,然后gsub适当地应用.结果将是a list,但as.data.frame修复此问题.

test$val <- 1:4 # a non character/factor variable
(test2 <- as.data.frame(lapply(test,function(x) if(is.character(x)|is.factor(x)) gsub("a","new",x) else x)))
    a   b   c val
1 new new   i   1
2   b   e   j   2
3   c   g   k   3
4   d   h new   4
class(test2$val) # to see if it is unchanged
[1] "integer"
Run Code Online (Sandbox Code Playgroud)

  • @RichardSmith这使表达式将其结果明显返回到控制台.通常无形地返回作业. (3认同)

Tho*_*mas 6

as.data.frame(sapply(test, function(x) gsub("a", "new", x)))
Run Code Online (Sandbox Code Playgroud)