类似于 按价值分割data.frame 我想通过值来分割一个df。在我的情况下,值并不总是完全相同。我试过这样做,但没有成功。
df <- data.frame(var1 = c("ab", 1, 2, 3, "ac", 1, 2, 3, 4, 5, 6, "ad", 1, 2), var2 = 1:14)
我想用a*来分割 它应该是这样的。
ab 1
1 2
2 3
3 4
ac 5
1 6
2 7
3 8
4 9
5 10
6 11
ad 12
1 13
2 14
我试过这样做
df[,1] == "a*"
#it shows all over 0
#I would do sth. like that
#split(df, cumsum(df[,1] == "a*"))
我认为 *
是错误的。但是我怎么说R,不同的值在a后面?
您可以使用 grepl
匹配模式和 cumsum
在它上面创建组。
split(df, cumsum(grepl('a.*', df$var1)))
#$`1`
# var1 var2
#1 ab 1
#2 1 2
#3 2 3
#4 3 4
#$`2`
# var1 var2
#5 ac 5
#6 1 6
#7 2 7
#8 3 8
#9 4 9
#10 5 10
#11 6 11
#$`3`
# var1 var2
#12 ad 12
#13 1 13
#14 2 14
等价的答案是 tidyverse
:
library(dplyr)
library(stringr)
df %>% group_split(cumsum(str_detect(var1, 'a.*')), keep = FALSE)
我们也可以这样做
split(df, cumsum(startsWith(as.character(df$var1), "a")))
#$`1`
# var1 var2
#1 ab 1
#2 1 2
#3 2 3
#4 3 4
#$`2`
# var1 var2
#5 ac 5
#6 1 6
#7 2 7
#8 3 8
#9 4 9
#10 5 10
#11 6 11
#$`3`
# var1 var2
#12 ad 12
#13 1 13
#14 2 14
或与 substr
split(df, cumsum(substr(df$var1, 1, 1) == 'a'))