替换R中数据框中的值

标签 r dataframe

我正在尝试在 R 中完成一项有点复杂的任务。

我有一个 data frame(为简单起见)三列。

第 1 列是一个字符串。
第 2 列是一个整数。
第 3 列是一个整数。

我想获取第 1 列中包含某个子字符串且第 2 列具有精确值的所有观察值,并将第三列替换为数字 1。

也就是说,我有以下dataframe:

x <- data.frame(x1 = c("bob","jane","bob","bobby","bob","jane","bobby","bob","jane","bob"),
                x2 = c(1,1,1,1,1,2,2,2,2,2),
                x3 = c(13,22,3,34,10,23,53,42,13,35))

而且,我想选择第 1 列包含 bob 且第 2 列==1 的观察值,并将第三列更改为 1,这样我最终得到:

y1 <- c("bob","jane","bob","bobby","bob","jane","bobby","bob","jane","bob")
y2 <- c(1,1,1,1,1,2,2,2,2,2)
y3 <- c(1,22,1,1,1,23,53,42,13,35)
y <- data.frame(y1,y2,y3)

我想在一个非常非常大的数据集上执行此操作。拆分数据集并将其重新组合在一起是不可行的。 我尝试过使用 grep,但是当我尝试同时进行两个匹配时它不起作用。另外,我尝试过子集,但是我必须拆分 dataframe 并将其重新组合在一起。 提前非常感谢。

最佳答案

R 具有使用 [<- 进行逻辑索引的能力函数,这真的很简单:

> x$x3[ grepl("bob", x$x1) & x$x2 == 1] <- 1
> x
      x1 x2 x3
1    bob  1  1
2   jane  1 22
3    bob  1  1
4  bobby  1  1
5    bob  1  1
6   jane  2 23
7  bobby  2 53
8    bob  2 42
9   jane  2 13
10   bob  2 35

要阅读代码,您应该将其视为:“对于 x 的每一行,其中列 'x1' 具有 "bob' 并且列 'x2' 等于 1 ,...您将值 1 分配给列'x3'。”如果您想拥有一个具有该值的新对象,您可以使用 y <- x 制作 x 的副本,然后进行处理。

关于替换R中数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622146/

相关文章:

r - 水-R : Apply custom library function on each row of H2OFrame

r - 使用查找向量替换变量中的字符串

python - Pandas 使用切片和整数索引选择列

python - pandas 中的 maskind 数据框元素

python - 如何在 pandas Dataframe 中实现我自己的公式?

r - 使用 rpart 在 R 中绘制决策树

r - 如何替换列表中所有元素的特定值

R:从函数内部在 globalenv() 中创建环境

python - Pandas :按组计算唯一的日期时间值会给出奇怪的值

python - 如何删除 pandas 中 count 和 sum 为 1 的行