【问题标题】:Compare element by element from two data frames比较两个数据帧中的元素
【发布时间】:2019-12-04 20:42:34
【问题描述】:

我想逐个元素地比较两个data.frame 中的元素,称为df1df2。从他们那里,我想建立一个新的data.frame,叫做out。如果元素相等,则out中的元素为1,否则为0

MWE

set.seed(1)
df1 <- data.frame(Q1 = sample(letters[1:5], 2, replace = TRUE), 
                 Q2 = sample(letters[1:5], 2, replace = TRUE))    
set.seed(2)
df2 <-  data.frame(Q1 = sample(letters[1:5], 2, replace = TRUE), 
                   Q2 = sample(letters[1:5], 2, replace = TRUE))

预期输出

out <- data.frame(Q1 = c(0, 0), Q2 = c(1, 0))

【问题讨论】:

    标签: r dataframe dplyr stringr


    【解决方案1】:

    如果在创建data.frame 时使用stringsAsFactors = FALSE 创建数据集,则factor 会很困难,因为属性会导致比较困难)

    +(df1 == df2)
    

    或者如果它是factor 转换为character 列与type.convert

    +(type.convert(df1, as.is = TRUE) == type.convert(df2, as.is = TRUE))
    

    或者利用matrix hack方式改成character

    +(as.matrix(df1) == as.matrix(df2))
    

    【讨论】:

    • 与期望的输出相比,是不是少了一个 1?
    • @bretauv 我认为它可能是来自不同 set.seed 的输出。在最近的 R 版本中,sample 发生了变化,如果他们使用不同的设置,值会不同
    猜你喜欢
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2018-01-15
    相关资源
    最近更新 更多