在下面编码的 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

我最初的尝试是使用 forif 语句,如下所示:
for(i in junk$nm) if(i %in% "B") junk$nm <- "b"

但我相信你可以看到,这将 junk$nm 的所有值替换为 b 。我可以理解为什么要这样做,但我似乎无法让它仅替换原始值为 B 的垃圾 $nm 的情况。

注意:我设法用 gsub 解决了这个问题,但为了学习 R,我仍然想知道如何让我的原始方法起作用(如果可能的话)

最佳答案

更容易将 nm 转换为字符,然后进行更改:

junk$nm <- as.character(junk$nm)
junk$nm[junk$nm == "B"] <- "b"

编辑:如果确实需要将 nm 作为因素保留,请在最后添加:
junk$nm <- as.factor(junk$nm)

关于根据条件 (`if` ) 语句替换数据框中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5824173/

10-12 17:06