R dplyr根据与另一个表的匹配来替换值

时间:2016-03-01 19:11:03

标签: r replace dplyr

我很难解决一些简单的事情。

我正在尝试根据与第二个表匹配的特定列替换值。

我可以使用replace在同一个表中创建条件,例如:

data <- mtcars %>% mutate(mpg = replace(mpg, cyl == 4, NA))

但我需要根据第二张表进行变异和替换,因为他们有一个匹配的表。 考虑我有一个名为color的第二个表。 我想将mtcars $颜色替换为true或false,基于mtcars $ cyl存在于颜色$ cyl。

cyl color
4   blue
6   green
8   yellow
1   red
2   black
3   purple

data <- mtcars %>% mutate(color = replace(color, cyl == color$cyl, TRUE))

可以使用mutate和replace,或者我需要使用匹配 或其他功能? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您无法使用替换,因为color中尚不存在列mtcars。 (这与您使用mpg的第一个示例不同,后者是现有列。)

此外,cyl == color$cly不是正确的测试,因为它是用于元素比较的。如果我理解正确,您需要检查mtcars$cyl的每个值,并在color$cyl中显示 的值。您可以将%in%用于此目的。

以下两行将color列添加到包含TRUE的mtcars,其中cyl的值也可以在color$cyl中找到。碰巧的是,所有行都是如此。

data <- mtcars %>%
        mutate(color = cyl %in% color$cyl)
head(data)
##    mpg cyl disp  hp drat    wt  qsec vs am gear carb color
## 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4  TRUE
## 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4  TRUE
## 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1  TRUE
## 4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1  TRUE
## 5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2  TRUE
## 6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1  TRUE