在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
and if
语句,如下所示:
for(i in junk$nm) if(i %in% "B") junk$nm <- "b"
但我相信你可以看到,这个替换所有的值junk$nm
用b
。我知道为什么这样做了,但是我似乎无法用它代替那些原来值为的junk $ nm情况B
。
注意:我设法解决了问题,gsub
但是为了学习RI,我仍然想知道如何使我的原始方法起作用(如果可能的话)
1
您可能需要将stringAsFactors = FALSE添加到原始data.frame结构中。
—
jimmyb 2011年
@jimmyb为什么?如果使用R的大多数建模代码进行建模,则因子是有用的,并且是必需的。处理此问题的正确方法是确认数据是一个因素。如果您不希望/不需要此转换,则可以按照您所说的做。如果您确实想要这个因素,那么@Kenny可以通过简单的方法进行操作。
—
加文·辛普森
因此,由于性能,因数曾经更受欢迎,但是,由于字符串是不可变的且经过散列处理,因数的值变得不那么明显了,因为大多数基本R功能只会直接转换它们(尽管带有警告)。我认为因素会导致在Peoples R代码中发现大量错误。
—
jimmyb 2011年