【问题标题】:Add dataframe column containing minimum value of a list添加包含列表最小值的数据框列
【发布时间】:2022-06-22 22:42:36
【问题描述】:

我有一个包含三列的数据框,其中两列可以包含数值或列表。我想添加包含这两列中每一列的最小值/最大值的附加列。例如,我的数据框可能如下所示;

ID A B
1 5 0.2, 0.3
2 0.5, 0.6 6
3 2 0.1, 0.1

我想改变它以添加列;

ID A B min_A max_A min_B max_B
1 5 0.2, 0.3 5 5 0.2 0.3
2 0.5, 0.6 6 0.5 0.6 6 6
3 2 0.1, 0.1 2 2 0.1 0.1

我试过mutate(min_A = min(unlist(A))),但这似乎取A 的整个列的最小值 而不仅仅是任何给定行上的列表。 mutate(min_A = min(A)) 出错,因为 list 是 min 命令的无效参数类型。那么我该如何添加我想要的数据呢?

【问题讨论】:

  • 请以dput 格式发布数据。当数据是/包含列表时,这一点特别重要。如果您的 data.frame 命名为 df,请使用 dput(head(df)) 的输出编辑问题。

标签: r


【解决方案1】:

您应该可以通过添加rowwise() 得到答案。我还在回答中使用了across(),但这部分并不是 100% 必要的,只是效率更高一点:

library(tidyverse)

df %>%
  rowwise() %>%
  mutate(across(A:B, function(x) min(unlist(x)), .names = "min_{.col}")) %>%
  mutate(across(A:B, function(x) max(unlist(x)), .names = "max_{.col}"))

# A tibble: 3 × 7
# Rowwise: 
     ID A         B         min_A min_B max_A max_B
  <dbl> <list>    <list>    <dbl> <dbl> <dbl> <dbl>
1     1 <dbl [1]> <dbl [2]>   5     0.2   5     0.3
2     2 <dbl [2]> <dbl [1]>   0.5   6     0.6   6  
3     3 <dbl [1]> <dbl [2]>   2     0.1   2     0.1

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 2021-09-24
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多