【发布时间】:2011-08-15 00:21:30
【问题描述】:
在下面编码的 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 的那些 junk$nm 情况。
注意:我设法用gsub 解决了这个问题,但为了学习 R,我仍然想知道如何让我的原始方法发挥作用(如果可能的话)
【问题讨论】:
-
您可能希望将 stringsAsFactors = FALSE 添加到原始 data.frame 构造中。
-
@jimmyb 为什么?如果使用 R 的大部分建模代码进行建模,因子是有用且必要的。处理这个问题的正确方法是承认数据是一个因素。如果您不想要/不需要这种转换,那么您可以按您说的做。如果您确实想要这个因素,那么有一些简单的方法可以进行@Kenny 想要执行的操作。
-
因此因素过去因为性能而更受欢迎,但是,现在字符串是不可变的并且散列的因素的值不太明显,因为大多数基本 R 功能只会转换它们(尽管使用警告)直接。我认为因素会导致我在人们的 R 代码中发现大量错误。