Как получить максимальное значение для списка в кадре данных в R - PullRequest
3 голосов
/ 16 апреля 2020

Я пытаюсь создать новый столбец, который получает максимальное значение для списка во фрейме данных. Мне было интересно, как я могу создать этот столбец с именем maxvalue из столбца df $ value, т.е. я хотел бы получить максимум этого списка в столбце.

  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

Ответы [ 3 ]

5 голосов
/ 16 апреля 2020

это должно сработать

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
1 голос
/ 16 апреля 2020

Мы также можем использовать rawToChar и charToRaw

sapply(as.character(df$x), function(x) 
      with(rle(charToRaw(x)), max(lengths[as.character(values) == 31])))
1 голос
/ 16 апреля 2020

Упрощенная версия логики @Daniel O c:

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