【问题标题】:How to get maximum value for a list in a data frame in R如何在R中的数据框中获取列表的最大值
【发布时间】:2020-07-29 15:38:43
【问题描述】:

我正在尝试创建一个新列,以获取数据框中列表的最大值。我想知道如何从 df$value 列创建名为 maxvalue 的列,即,我想在列中获取该列表的最大值。

  x <- c( "000010011100011111001111111100", "011110", "0000000")
  y<- c(1, 2,3)
 df<- data.frame(x,y)
 library(stringr)
 df$value <- strsplit(df$x, "[^1]+", perl=TRUE)
  # expected output  ( I have tried the following)
 df$maxvalue<- max(df$value) 
  df$maxvalue
   8 
   4
   0

【问题讨论】:

  • 是字符串中1的输出总和吗?另外,请澄清最大值,您是否将其与 y 字段进行比较以找到最大值?
  • 它是1的连续系列的最大值,例如10001100111,在这种情况下它将是3作为最大连续
  • 如果我的回答对你有帮助,请考虑采纳。谢谢

标签: r string list dataframe stringr


【解决方案1】:

这应该可以解决问题

df$value <- lapply(lapply(strsplit(as.character(df$x),"[^1]+"), nchar),max)

输出:

> df
                               x y value
1 000010011100011111001111111100 1     8
2                         011110 2     4
3                        0000000 3     0

【讨论】:

    【解决方案2】:

    @Daniel O 逻辑的简化版:

    df$value <- sapply(strsplit(as.character(df$x),"[^1]+"), function(x){max(nchar(x))})
    

    【讨论】:

    • 您可以稍微简化一些。在这种情况下,您的函数不需要 {}
    • @DanielO 虽然您是正确的,但实际上不会对代码的输入/输出或速度产生任何影响。
    【解决方案3】:

    我们也可以使用rawToCharcharToRaw

    sapply(as.character(df$x), function(x) 
          with(rle(charToRaw(x)), max(lengths[as.character(values) == 31])))
    

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 1970-01-01
      • 2014-08-04
      • 2023-02-23
      • 2017-05-24
      • 2016-01-18
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多