【问题标题】:Column in table consists of lists, for each row, find minimum of list and append to new column表中的列由列表组成,对于每一行,找到列表的最小值并附加到新列
【发布时间】:2017-11-09 20:11:39
【问题描述】:

正如标题所说,我有一列“值”,其中包含每个条目的值列表。我想在列表中为每一行找到最小值并将其附加到新列中。以下是我根据这个答案Extract the maximum value within each group in a dataframe 尝试过的(除其他外)。 不幸的是,我只能找到整列的最小值并将相同的最小值应用于每一行。

df <- df[,'minVal' := min(unlist(df$values))]

【问题讨论】:

  • 请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • 如果您提供带有示例输入数据的reproducible example(最好是某种类型的dput()),会更容易为您提供帮助。
  • 抱歉,我已经有一段时间没有使用 Stackoverflow 了。 Eric 已在下面回答,他的示例捕捉到了模型。

标签: r dataframe


【解决方案1】:

正如您所发现的,min 将返回整个列的最小值。听起来每个条目都是一个列表,当您取消列出它时,您将获得一个包含所有值的向量,其中min 将返回最小值。

相反,您可以对列表中的每个条目applymin,以获得最小值。

此外,:= 分配已经到位。您不需要使用&lt;- 分配回df,并且在data.table 中您可以直接引用列,不要使用df$values

试试这个:

library(data.table)

df <- data.table(a = 1:3, values = list(1:6, 2:4, 9:11))
df[, minVal := sapply(values, min)]
df
#    a      values minVal
# 1: 1 1,2,3,4,5,6      1
# 2: 2       2,3,4      2
# 3: 3     9,10,11      9

【讨论】:

    猜你喜欢
    • 2014-09-06
    • 1970-01-01
    • 2019-03-29
    • 2023-01-10
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多