我正在尝试创建一个新列,该列为我获取数据框中列表的最大值。我想知道如何从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
答案 0 :(得分:5)
这应该可以解决问题
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 :(得分:1)
@Daniel O的逻辑的简化版本:
df$value <- sapply(strsplit(as.character(df$x),"[^1]+"), function(x){max(nchar(x))})
答案 2 :(得分:1)
我们还可以使用rawToChar
和charToRaw
sapply(as.character(df$x), function(x)
with(rle(charToRaw(x)), max(lengths[as.character(values) == 31])))