在下面编码的R数据帧中,我想用b
替换所有出现B
的时间。
junk <- data.frame(x <- rep(LETTERS[1:4], 3), y <- letters[1:12])
colnames(junk) <- c("nm", "val")
这提供了:
nm val
1 A a
2 B b
3 C c
4 D d
5 A e
6 B f
7 C g
8 D h
9 A i
10 B j
11 C k
12 D l
我最初的尝试是像这样使用for
和if
语句:
for(i in junk$nm) if(i %in% "B") junk$nm <- "b"
但我相信您可以看到,这会将junk$nm
的所有值替换为b
。我明白为什么这样做了,但是我似乎不能让它只替换原始值为B
的那些垃圾$nm的情况。
注意:我设法用gsub
解决了这个问题,但是为了学习R,我仍然想知道如何让我原来的方法工作(如果可能的话)。
发布于 2011-04-29 04:11:04
更容易将nm转换为字符,然后进行更改:
junk$nm <- as.character(junk$nm)
junk$nm[junk$nm == "B"] <- "b"
编辑:如果您确实需要维护nm作为因子,请在末尾添加以下内容:
junk$nm <- as.factor(junk$nm)
发布于 2013-12-15 00:27:03
替换值的另一种有用的方法
library(plyr)
junk$nm <- revalue(junk$nm, c("B"="b"))
发布于 2012-01-07 21:26:04
在一个命令中完成此操作的最简单方法是使用which
命令,并且也不需要通过执行以下操作将因子更改为字符:
junk$nm[which(junk$nm=="B")]<-"b"
https://stackoverflow.com/questions/5824173
复制相似问题