Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在另一个变量的值在该日期达到最大值/最小值的日期后使用分割数据帧_R_Dataframe_Datetime_Split - Fatal编程技术网

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

>