2016-03-01 23 views
1

我很难解决一些简单的问题。R dplyr根据与另一个表的匹配取代值

我想在第二个表中匹配的特定列中替换一个值。

我可以使用替换在同一个表创造条件,如:

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

但我需要突变和替换基于第二表,考虑到他们匹配的表。 考虑我有第二个表名为颜色。 我想在颜色$ cyl中存在mtcars $ cyl的条件下将mtcars $ color替换为true或false。

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

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

将有可能使用变异,更换或者我需要用一根火柴 或其他功能? 感谢您的帮助。

回答

2

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

另外,cyl == color$cly不是正确的测试,因为它是用于按元素进行比较的。如果我理解正确,你想检查每个值mtcars$cyl,那个值出现在任何地方color$cyl。您可以使用%in%来达到此目的。

以下两行添加列color到包含TRUE为,其具有也可以在color$cyl发现cyl的值的每一行mtcars。如此,所有行都是如此。

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 
+1

非常感谢朋友。我不知道在这种情况下使用'%in%'。其实,我不记得曾见过那个运营商的rsrsrs。这正是我所期待的。我一直在寻找错误的地方。再次感谢。 – aoceano

相关问题