【问题标题】:Compare two dataframe colums and add them to the dataframe比较两个数据框列并将它们添加到数据框
【发布时间】:2015-01-27 09:12:25
【问题描述】:

我有一个包含两列的数据框。我想向df 添加一个新列,其中所有值都在其中,数据框是否与第一个列匹配。

我试过了:

df<-data.frame(A=c("1","test","2","3",NA,"Test", NA),B=c("1","No Match","No Match","3",NA,"Test", "No Match"))

df[df$A == df$B ]

但是,我得到:

Error in Ops.factor(df$A, df$B) : level sets of factors are different    

任何建议我做错了什么?

【问题讨论】:

    标签: r statistics


    【解决方案1】:

    先处理NA再添加你的专栏:

    > df[is.na(df)]=""
    > df$New = with(df, A==B)
    > df
         A        B   New
    1    1        1  TRUE
    2 test No Match FALSE
    3    2 No Match FALSE
    4    3        3  TRUE
    5                TRUE
    6 Test     Test  TRUE
    7      No Match FALSE
    

    或使用df = df[complete.cases(df),] 从初始data.frame 中删除NA,然后添加该列。

    如果你真的想在 A 或 B 列中有NA 时有False:

    > transform(df, New=ifelse(is.na(A)|is.na(B), FALSE, df$A==df$B))
         A        B   New
    1    1        1  TRUE
    2 test No Match FALSE
    3    2 No Match FALSE
    4    3        3  TRUE
    5 <NA>     <NA> FALSE
    6 Test     Test  TRUE
    7 <NA> No Match FALSE
    

    【讨论】:

    • 感谢我们的回答!我会这样做,如果它不适用,那么我会这样做false。任何如果添加这一秒怎么可能?
    • 您是否使用与示例中相同的df?它给出了OP提到的错误,否则您必须在data.frame中指定stringsAsFactors=FALSE的需要
    • 我使用的是同一个df。 @mrquad,如果你真的想的话,有一个处理 NA 的版本。
    • 由于某种原因,我得到与 OP 相同的错误。我正在使用 R 3.1.2。
    • 有趣,我使用的是3.1.0 (2014-04-10) 版本。 Platform: i386-w64-mingw32/i386 (32-bit)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多