Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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_Dplyr_Data.table_Time Series - Fatal编程技术网

R中的加窗时域统计:如何加窗一列并将统计方法应用于其他列

R中的加窗时域统计:如何加窗一列并将统计方法应用于其他列,r,dataframe,dplyr,data.table,time-series,R,Dataframe,Dplyr,Data.table,Time Series,我在R中有以下数据帧: Time A 1 1 2 1 3 1 4 1 5 2 6 2 7 3 8 3 9 2 10 1 11 1 12 1 13 3 14 3 15 3 让我们考虑“代码>时间列中的第二个,我需要定义一个3秒的窗口,并将两个或三个不同的方法应

我在R中有以下数据帧:

Time      A

1         1
2         1
3         1
4         1
5         2
6         2
7         3
8         3
9         2
10        1
11        1
12        1
13        3
14        3
15        3

让我们考虑“代码>时间<代码>列中的第二个,我需要定义一个3秒的窗口,并将两个或三个不同的方法应用到<代码> A < /代码>列,并在单独的列中显示每个函数的结果,让我们考虑第一个函数是平均的,第二个函数是max,像这样:

Time-window        average    max
   1                  1        1
   2                  2.5      2
   3                   4       3
   4                   1       1
   4                   3       3

如何使用任何可用的库在R中执行此操作。

创建一个应用所有所需函数的函数

apply_fun <- function(x) {
    c(mean = mean(x), max = max(x))
}

apply\u-fun创建一个应用所有需要的函数的函数

apply_fun <- function(x) {
    c(mean = mean(x), max = max(x))
}

apply_fun如果您更喜欢
dplyr
,您可以执行以下操作:

df %>%
 group_by(time_window = ceiling(Time/3)) %>%
 summarise_at(2, list(mean = mean, max = max))

  time_window  mean   max
  <fct>       <dbl> <int>
1 1            1        1
2 2            1.67     2
3 3            2.67     3
4 4            1        1
5 5            3        3

如果您更喜欢dplyr
,可以执行以下操作:

df %>%
 group_by(time_window = ceiling(Time/3)) %>%
 summarise_at(2, list(mean = mean, max = max))

  time_window  mean   max
  <fct>       <dbl> <int>
1 1            1        1
2 2            1.67     2
3 3            2.67     3
4 4            1        1
5 5            3        3

A
数据表
解决方案

library(data.table)

dat <- setDT(dat)

dat2 <- dat[, `Time-window` := rep(1:(.N/3), each = 3)][
  , .(average = mean(A), max = max(A)), by = `Time-window`
]

dat2
#    Time-window  average max
# 1:           1 1.000000   1
# 2:           2 1.666667   2
# 3:           3 2.666667   3
# 4:           4 1.000000   1
# 5:           5 3.000000   3
库(data.table)

datA
data.表
solution

library(data.table)

dat <- setDT(dat)

dat2 <- dat[, `Time-window` := rep(1:(.N/3), each = 3)][
  , .(average = mean(A), max = max(A)), by = `Time-window`
]

dat2
#    Time-window  average max
# 1:           1 1.000000   1
# 2:           2 1.666667   2
# 3:           3 2.666667   3
# 4:           4 1.000000   1
# 5:           5 3.000000   3
库(data.table)


到目前为止你试了什么?你有没有这样的链接?到目前为止你尝试了什么?你有没有这样的链接,比如,,
dat[,(average=mean(A),max=max(A)),by=。(“时间窗口”=rep(1:(.N/3),each=3))
?谢谢,如果不是将窗口长度作为行数,而是将其作为时间,例如每0.2秒,我知道它可能不适用于此example@jangorecki谢谢分享。现在我看到我们可以通过
参数直接在
中创建一个新列。这很酷。@chessoapiens每隔0.2秒不适用于此示例,因为您说过您的时间步长是秒,并且每0.2秒小于此值。但是,如果您能够找到一种方法来创建时间窗口,它应该可以工作。也许
dat[,(average=mean(a),max=max(a)),by=。(“时间窗口”=rep(1:(.N/3),each=3))]
?谢谢,如果不是将窗口长度作为行数,而是将其作为时间,例如每0.2秒,我知道它可能不适用于此example@jangorecki谢谢分享。现在我看到我们可以通过
参数直接在
中创建一个新列。这很酷。@chessoapiens每隔0.2秒不适用于此示例,因为您说过您的时间步长是秒,并且每0.2秒小于此值。但是,如果你能找到一种方法来创建
时间窗口
列,它应该可以工作。谢谢,我需要添加一个小东西,如果我想在组列中为每个窗口设置开始秒,该怎么办?例如1 3 6 912@chessosapiens您可以将
df$Time[match(unique(df$group),df$group)]
添加到最终输出数据帧中。我可能需要对我的原始问题进行编辑,我如何定义窗口长度,而不是基于行数,而是基于值,例如,我可能希望时间窗口为0.2秒。@chessosapiens,您可能需要使用
cut
findInterval
根据
time
值将其划分为多个部分。类似于下面的感谢,我需要添加一个小东西,如果我想在组列中为每个窗口设置开始秒,该怎么办?例如1 3 6 912@chessosapiens您可以将
df$Time[match(unique(df$group),df$group)]
添加到最终输出数据帧中。我可能需要对我的原始问题进行编辑,我如何定义窗口长度,而不是基于行数,而是基于值,例如,我可能希望时间窗口为0.2秒。@chessosapiens,您可能需要使用
cut
findInterval
根据
time
值将其划分为多个部分。类似于下面的内容,谢谢,如果不是将窗口长度作为行数,而是将其作为时间,例如每0.2秒一次,我知道它可能不适用于此示例。如果您的行代表0.2秒,则可以应用相同的原则。否则,我真的说不出你是什么意思。假设每行时差为0.014秒,我希望窗口长度为0.2秒,你可以尝试重置累积和。在达到0.2秒后重置。谢谢,如果不是将窗口长度作为行数,而是将其作为时间,例如每0.2秒重置一次,我知道它可能不适用于此示例。如果有行表示0.2秒,则可以应用相同的原则。否则,我真的说不出你是什么意思。假设每行时差为0.014秒,我希望窗口长度为0.2秒,你可以尝试重置累积和。达到0.2秒后重置。