我有一个类似的数据框:
col1 col2
1 10
1 30
2 60
3 20
3 12
3 51
3 11
当col2中的值大于50时,我想将此数据帧分为多个小块:
dataframe #1
col1 col2
1 10
1 30
2 60
dataframe #2
col1 col2
3 20
3 12
3 51
dataframe #3
col1 col2
3 11
我已经尝试过split
函数,但不能完成此任务。我想知道是否有通用功能来实现这一目标?
答案 0 :(得分:5)
您可以在cumsum
中使用split
,并进行大量rev
的添加,以便在上一组中包含col2> 50的行
rev(split(df, rev(cumsum(rev(df$col2 > 50)))))
#@joran method, (same result, except for names):
split(df, cumsum(df$col2 > 50) - (df$col2 > 50))
输出:
# $`2`
# col1 col2
# 1: 1 10
# 2: 1 30
# 3: 2 60
#
# $`1`
# col1 col2
# 1: 3 20
# 2: 3 12
# 3: 3 51
#
# $`0`
# col1 col2
# 1: 3 11
在没有所有rev
的情况下,您会得到此
split(df, cumsum(df$col2 > 50))
# $`0`
# col1 col2
# 1: 1 10
# 2: 1 30
#
# $`1`
# col1 col2
# 1: 2 60
# 2: 3 20
# 3: 3 12
#
# $`2`
# col1 col2
# 1: 3 51
# 2: 3 11