【问题标题】:R dplyr replace value based on match with another tableR dplyr 根据与另一个表的匹配替换值
【发布时间】:2016-06-14 08:55:02
【问题描述】:

我很难解决一些简单的问题。

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

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

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

但考虑到他们有一个匹配的表,我需要根据第二个表进行变异和替换。 考虑我有第二个名为 color 的表。 我想根据 color$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))

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

【问题讨论】:

    标签: r replace dplyr


    【解决方案1】:

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

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

    以下两行将 color 添加到 mtcars 中,其中包含 TRUE 的每一行在 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
    

    【讨论】:

    • 非常感谢朋友。我不知道%in% 用于这种情况。实际上,我不记得曾经见过那个运营商 rsrsrs。这正是我一直在寻找的。我一直在找错地方。再次感谢。
    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2022-11-03
    • 2019-03-23
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多