首页 > 解决方案 > 替换数据框中列中的特定值

问题描述

对于这样一个基本问题,我真的很抱歉,我花了 20 分钟试图解决这个问题。例子:

x <- sample(c("1","2"), 100, replace = TRUE)
y <- sample(c("3","4"), 100, replace = TRUE)
xy <- cbind(x,y)

现在我想将 x 列中的所有“2”替换为“0”。根据我的真实数据,我需要将所有编码为“2”的女性重新编码为“0”。

我努力了:

xy$x[,xy$x == 2] <- 0

xy[xy$x== 2] <- 0

women <- xy$x== 2
xy[women,] <- 0

这些都不起作用。前两个给出错误,最后一个用零替换整行。我在这个网站上搜索了很多,但必须有一个非常简单的解决方案(无论如何都不是困难的工作)。

编辑:

对于使用不等于我的实际问题的样本,我深表歉意。我该如何处理这个样本?

x <- sample(c("1","2"), 100, replace = TRUE)
y <- sample(c("3","4"), 100, replace = TRUE)
xy <- cbind(x,y)

谢谢!

标签: rreplace

解决方案


有几个问题:

  • xy是矩阵,但代码使用的是用于数据帧的 $。

  • 如果xy是一个数据框,那么xy$x它是一维的,但问题中的代码试图用 2 个维度对其进行索引

  • 问题中的代码women正在尝试将整行设置为 0

  • 为了使示例可重现,问题应包括set.seed,以便每次调用时都使用相同的随机数

问题中代码的这种变体有效。

如果您使用的是早于 R 4.0 的 R 版本,请务必使用stringAsFactors=FALSE; 然而,对于以后的版本,这个参数是不需要的,尽管如果你把它留在里面不会有什么坏处。

xy <- as.data.frame(xy, stringsAsFactors = FALSE)
xy$x[xy$x == 2] <- 0

对于涉及women再次假设这xy是一个数据框的代码:

women <- xy$x== 2
xy[women, "x"] <- 0

如果xy是问题中的矩阵,那么这有效:

xy[xy[, "x"] == 2, "x"] <- 0

无论xy是矩阵还是数据框,这都有效,并返回一个 data.frame:

transform(xy, x = replace(x, x == 2, 0))

或者

transform(xy, x = ifelse(x == 2, 0, x))

推荐阅读