R 在另一个变量的值在该日期达到最大值/最小值的日期后使用分割数据帧
我有一个类似于以下内容的数据集:R 在另一个变量的值在该日期达到最大值/最小值的日期后使用分割数据帧,r,dataframe,datetime,split,R,Dataframe,Datetime,Split,我有一个类似于以下内容的数据集: df您可以使用which.max获取max值的索引,并使用它对数据帧进行子集划分 ind <- which.max(df$value) df1 <- df[seq_len(ind - 1), ] df2 <- df[ind:nrow(df), ] df1 # A tibble: 3 x 2 # date value # <chr> <dbl> #1 2020-02-01 0 #2 20
df您可以使用which.max
获取max
值的索引,并使用它对数据帧进行子集划分
ind <- which.max(df$value)
df1 <- df[seq_len(ind - 1), ]
df2 <- df[ind:nrow(df), ]
df1
# A tibble: 3 x 2
# date value
# <chr> <dbl>
#1 2020-02-01 0
#2 2020-02-02 1
#3 2020-02-03 2
df2
# A tibble: 3 x 2
# date value
# <chr> <dbl>
#1 2020-02-04 7
#2 2020-02-05 3
#3 2020-02-06 4
使用base R的另一种方法:
> df
date value
1 2020-02-01 0
2 2020-02-02 1
3 2020-02-03 2
4 2020-02-04 7
5 2020-02-05 3
6 2020-02-06 4
> df1 <- df[1:(which(df$value == max(df$value)) - 1), ]
> df2 <- df[which(df$value == max(df$value)):nrow(df), ]
> df1
date value
1 2020-02-01 0
2 2020-02-02 1
3 2020-02-03 2
> df2
date value
4 2020-02-04 7
5 2020-02-05 3
6 2020-02-06 4
>
>df
日期值
1 2020-02-01 0
2 2020-02-02 1
3 2020-02-03 2
4 2020-02-04 7
5 2020-02-05 3
6 2020-02-06 4
>df1 df2 df1
日期值
1 2020-02-01 0
2 2020-02-02 1
3 2020-02-03 2
>df2
日期值
4 2020-02-04 7
5 2020-02-05 3
6 2020-02-06 4
>
对于分组数据:
> mylist <- df %>% split(f = df$ID)
> mylist
$`1`
ID date value
1 1 2020-02-01 0
2 1 2020-02-02 1
3 1 2020-02-03 2
4 1 2020-02-04 7
5 1 2020-02-05 3
6 1 2020-02-06 4
$`2`
ID date value
7 2 2020-02-01 10
8 2 2020-02-02 16
9 2 2020-02-03 11
10 2 2020-02-04 12
> split_list <- lapply(mylist, function(x) x[1:(which.max(x$value) - 1),])
> split_list <- append(split_list, lapply(mylist, function(x) x[which.max(x$value): nrow(x),]))
> split_list
$`1`
ID date value
1 1 2020-02-01 0
2 1 2020-02-02 1
3 1 2020-02-03 2
$`2`
ID date value
7 2 2020-02-01 10
$`1`
ID date value
4 1 2020-02-04 7
5 1 2020-02-05 3
6 1 2020-02-06 4
$`2`
ID date value
8 2 2020-02-02 16
9 2 2020-02-03 11
10 2 2020-02-04 12
>
>mylist%拆分(f=df$ID)
>迈利斯特
$`1`
ID日期值
1 1 2020-02-01 0
2 1 2020-02-02 1
3 1 2020-02-03 2
4 1 2020-02-04 7
5 1 2020-02-05 3
6 1 2020-02-06 4
$`2`
ID日期值
7 2 2020-02-01 10
8 2 2020-02-02 16
9 2 2020-02-03 11
10 2 2020-02-04 12
>拆分列表拆分列表拆分列表拆分列表
$`1`
ID日期值
1 1 2020-02-01 0
2 1 2020-02-02 1
3 1 2020-02-03 2
$`2`
ID日期值
7 2 2020-02-01 10
$`1`
ID日期值
4 1 2020-02-04 7
5 1 2020-02-05 3
6 1 2020-02-06 4
$`2`
ID日期值
8 2 2020-02-02 16
9 2 2020-02-03 11
10 2 2020-02-04 12
>
谢谢。如果我想将其应用于包含具有不同ID的对象的较大数据集,该怎么办。我的意思是同时使用nest和map之类的工具。@SeyedHosseini请相应地更新您的示例,并显示它的预期输出。还要确保您的示例实际运行。例如,使用as_tible
为我返回一个错误,我不得不将其更改为tibble
。谢谢@ronak shah,按照您的指示,我编辑了这个问题。感谢您的时间和建议。检查更新的答案。最好创建数据帧列表。谢谢。如果我想将其应用于包含具有不同ID的对象的较大数据集,该怎么办。我的意思是使用nest和map之类的工具我假设如果对象有ID,我们就必须对它们进行分组,但正如Ronak提到的,请共享反映您的数据,以便能够找到满足您需求的解决方案。谢谢您的回复。我更新了问题以澄清我的观点。感谢您的时间和建议。已经添加了分组数据的代码,请检查这是否适用于您。感谢您的时间,因为我不太擅长基本R,@ronak shah的答案更适合我。
> mylist <- df %>% split(f = df$ID)
> mylist
$`1`
ID date value
1 1 2020-02-01 0
2 1 2020-02-02 1
3 1 2020-02-03 2
4 1 2020-02-04 7
5 1 2020-02-05 3
6 1 2020-02-06 4
$`2`
ID date value
7 2 2020-02-01 10
8 2 2020-02-02 16
9 2 2020-02-03 11
10 2 2020-02-04 12
> split_list <- lapply(mylist, function(x) x[1:(which.max(x$value) - 1),])
> split_list <- append(split_list, lapply(mylist, function(x) x[which.max(x$value): nrow(x),]))
> split_list
$`1`
ID date value
1 1 2020-02-01 0
2 1 2020-02-02 1
3 1 2020-02-03 2
$`2`
ID date value
7 2 2020-02-01 10
$`1`
ID date value
4 1 2020-02-04 7
5 1 2020-02-05 3
6 1 2020-02-06 4
$`2`
ID date value
8 2 2020-02-02 16
9 2 2020-02-03 11
10 2 2020-02-04 12
>