首页 > 解决方案 > 尝试比较两个数据帧,并将逻辑结果写入 R 中的新数据帧

问题描述

我有一个包含 18 列的 R 数据框,我想编写一个比较第 1 列和第 2 列的函数,如果两列包含相同的值,则将 T 或 F 的逻辑结果写入新列(这部分对我来说不是太难),但是我想为下一列重复此过程并将 T/F 写入新列。

值 col 1 = 值 col 2,将 T/F 写入新列,值 col 3 = 值 col 4,将 T/F 写入新列(或将结果写入新数据帧)

我一直在尝试用这个purrr包来做这个,并使用这个pmap/map功能,但我知道我犯了一个错误,错过了一些重要的部分。

标签: r

解决方案


如果我正确理解您的问题,此功能应该可以工作。

df <- 
  data.frame(a = c(18, 6, 2 ,0), 
             b = c(0, 6, 2, 18), 
             c =  c(1, 5, 6, 8),
             d = c(3, 5, 9, 2))

compare_columns <- 
  function(x){
    n_columns <- ncol(x)
    odd_columns <- 2*1:(n_columns/2) - 1
    even_columns <- 2*1:(n_columns/2)
    comparisons_list <- 
      lapply(seq_len(n_columns/2),
             function(y){
               df[, odd_columns[y]] == df[, even_columns[y]]
             })
    comparisons_df <- 
      as.data.frame(comparisons_list,
                    col.names = paste0("column", odd_columns, "_column", even_columns))
    return(cbind(x, comparisons_df))
  }

compare_columns(df)

推荐阅读