【问题标题】:R look up matches in a columnR 在列中查找匹配项
【发布时间】:2020-02-13 21:52:40
【问题描述】:

我有一个只有一列的数据框,它有将近 20,0000 df1 %>% 值 c(10,20,30,50)

我有另一个数据框,它有多个列,其中一个列也是值。 df2 %>% id c(24782,18741,17041,10471401) 值 c(70,90,10,20,50) 这里还有更多列,这个数据集 13 个变量中的 50,00000 个。 我想看看 df1 中的值列是否在值 df2 中,并将其放入新数据框中的新列中。

df3 % mutate(newvalue = ifelse(df1$values %in% df2$values,1,0))

错误:列...必须是长度...(行数)或一,而不是...

【问题讨论】:

    标签: r


    【解决方案1】:

    两个问题。

    1. 鉴于您正在修改df2,您的订单是错误的。 df1$values %in% df2$values 告诉您,对于每个 df1$values 项目,它是否在 df2 中。所以结果只要df1,而不是df2。将这些信息放在df2 中是没有意义的,因为它是关于df1 的结果。您要么需要将列添加到df1,要么切换顺序并使用df2$values %in% df1$values(我认为这是您想要的)。

    2. dplyr 函数需要数据框参数的不带引号的列名。因此,如果您将df2 传递到mutate,您不要mutate 中使用df2$

    进行这两个更正,你得到

    df3 <- df2 %>% mutate(newvalue = ifelse(values %in% df1$values,1,0))
    

    作为额外提示,%in% 返回一个布尔值 (TRUE/FALSE) 结果。您不需要 ifelse 将其转换为 1/0,使用 as.integer 效率更高,结果相同。

    df3 <- df2 %>% mutate(newvalue = as.integer(values %in% df1$values))
    

    【讨论】:

    • 是的,非常感谢,成功了!并感谢您的解释!
    • 如果效果好的话,打勾对别人会有帮助。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多