【问题标题】:How to calculate the proportion of values in one column, which don't match with values in another?如何计算一列中的值与另一列中的值不匹配的比例?
【发布时间】:2021-07-26 15:59:39
【问题描述】:

我有一个使用 full_join 获得的数据框:

col1  col2
11    11
12    NA
14    14
NA    17
NA    18
NA    NA
NA    NA

我想计算每列中与另一列不匹配的值的比例。例如,这里 col1 为 1/3。因为它只是值 12,它不匹配并且不是 NA。对于 col2,它将是 2/4,因为有 17 和 18 与 col1 中的值不匹配并且不是 NA。该怎么做?

【问题讨论】:

    标签: r dataframe function


    【解决方案1】:

    如果只是两列之间的一次比较以简单地得到两个数字:

    df <- tribble(
        ~col1,  ~col2,
        11,    11,
        12,    NA,
        14,    14,
        NA,    17,
        NA,    18,
        NA,    NA,
        NA,    NA
    )
    
    mean(!df$col1[!is.na(df$col1)] %in% df$col2) # 0.333
    
    mean(!df$col2[!is.na(df$col2)] %in% df$col1) # 0.5
    

    【讨论】:

    • 能不能写成比例,而不是百分比(看实数)?
    • 如果你想要实际的“1/3”字符串,你可以使用paste0(sum(!df$col1[!is.na(df$col1)] %in% df$col2), "/", length(df$col1[!is.na(df$col1)]))。
    【解决方案2】:

    你可以使用 dplyr。

    对于第 1 列:

    df %>% summarise(col1_in_col2 = sum(!col1 %in% col2) / sum(!is.na(col1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多