对于这个基本问题,我深表歉意,我花了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)
谢谢!
答案 0 :(得分:0)
有几个问题:
xy
是矩阵,但是代码使用$表示数据帧。
如果xy
是一个数据帧,则xy$x
是一维的,但是问题中的代码正尝试使用2个维度对其进行索引
问题中使用women
的代码正在尝试将整行设置为0
为了使示例可重复,该问题应包含set.seed
,以便每次调用它时都使用相同的随机数字
此代码在问题中的变体有效。请注意,使用stringsAsFactors=FALSE
很重要,因为否则列x
将是factor
,而0则不是该因子的水平。
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))