r - 替换数据框中列中的特定值
问题描述
对于这样一个基本问题,我真的很抱歉,我花了 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)
谢谢!
解决方案
有几个问题:
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))
推荐阅读
- excel - 将变量值分配给变量键
- python - 计算每组中 NaN 的数量
- .htaccess - 在 RedirectRule 发生后重定向到其他网站
- google-api - Dialogflow v2 客户端库不工作 | 错误:无法加载默认凭据
- java - 在 Linux Mint 中打开 Eclipse 时出错;OpenJDK 64 位服务器 VM 警告:忽略选项 MaxPermSize=512m;在 8.0 中删除了支持
- prometheus - thanos - 如何删除处于 DOWN 状态的商店
- c++ - 如何从 Scan0 创建位图/图像?
- firebase - Nuxt 2.5.0 + Firebase - 未找到依赖项
- python - 由于 libdispatch 使子线程崩溃,Python 正在崩溃
- c# - 避免使用 .NET Core 重复 POST