首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据条件(`if`)语句替换数据框中的值

根据条件(`if`)语句替换数据框中的值
EN

Stack Overflow用户
提问于 2011-04-29 03:53:55
回答 8查看 719.2K关注 0票数 145

在下面编码的R数据帧中,我想用b替换所有出现B的时间。

代码语言:javascript
复制
junk <- data.frame(x <- rep(LETTERS[1:4], 3), y <- letters[1:12])
colnames(junk) <- c("nm", "val")

这提供了:

代码语言:javascript
复制
   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语句:

代码语言:javascript
复制
for(i in junk$nm) if(i %in% "B") junk$nm <- "b"

但我相信您可以看到,这会将junk$nm的所有值替换为b。我明白为什么这样做了,但是我似乎不能让它只替换原始值为B的那些垃圾$nm的情况。

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-29 04:11:04

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

代码语言:javascript
复制
junk$nm <- as.character(junk$nm)
junk$nm[junk$nm == "B"] <- "b"

编辑:如果您确实需要维护nm作为因子,请在末尾添加以下内容:

代码语言:javascript
复制
junk$nm <- as.factor(junk$nm)
票数 245
EN

Stack Overflow用户

发布于 2013-12-15 00:27:03

替换值的另一种有用的方法

代码语言:javascript
复制
library(plyr)
junk$nm <- revalue(junk$nm, c("B"="b"))
票数 47
EN

Stack Overflow用户

发布于 2012-01-07 21:26:04

在一个命令中完成此操作的最简单方法是使用which命令,并且也不需要通过执行以下操作将因子更改为字符:

代码语言:javascript
复制
junk$nm[which(junk$nm=="B")]<-"b"
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5824173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档