Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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 在多列df中计算每年的SE_R - Fatal编程技术网

R 在多列df中计算每年的SE

R 在多列df中计算每年的SE,r,R,我有几个数据帧的列表,如下所示: Year tex21.1 tex21.2 tex21.3 2015 0.2 NA 1 2016 0.3 0.4 0.99 2017 0.5 1.2 0.6 2018 NA 1.5 0.5 我想写一个函数,它接收这些数据帧并在其中循环,计算(1)每年所有行的平均值,(2)每年所有行的标准误差。像这样: calculate_function <- functi

我有几个数据帧的列表,如下所示:

Year  tex21.1  tex21.2  tex21.3 
2015  0.2      NA       1
2016  0.3      0.4      0.99
2017  0.5      1.2      0.6
2018  NA       1.5      0.5
我想写一个函数,它接收这些数据帧并在其中循环,计算(1)每年所有行的平均值,(2)每年所有行的标准误差。像这样:

calculate_function <- function (x) {
  do something 
}

calcs<-lapply(my_list, calculate_function)

> calcs[[1]] 

  Year  mean     SE
  2015  value    value            
  2016  value    value     
  2017  value    value   
  2018  value    value      

calculate\u函数如果我们需要计算每行的
平均值
se
,则使用
apply
MARGIN=1
。使用
lappy
列表
元素上循环,然后使用
apply

calculate_function <- function(x) {
       cbind(x['Year'], t(apply(x[-1], 1, function(u)
                     c(mean = mean(u, na.rm = TRUE),
           se = plotrix::std.error(u,  na.rm = TRUE)))))
    }
lapply(my_list, calculate_function)
数据
my_list如果我们需要计算每行的
平均值
se
,则使用
apply
MARGIN=1
。使用
lappy
列表
元素上循环,然后使用
apply

calculate_function <- function(x) {
       cbind(x['Year'], t(apply(x[-1], 1, function(u)
                     c(mean = mean(u, na.rm = TRUE),
           se = plotrix::std.error(u,  na.rm = TRUE)))))
    }
lapply(my_list, calculate_function)
数据
my_list另一个基本R选项,但类似于


calculate_函数另一个基本R选项,但类似于

计算函数
my_list <- list(structure(list(Year = 2015:2018, tex21.1 = c(0.2, 0.3, 0.5, 
NA), tex21.2 = c(NA, 0.4, 1.2, 1.5), tex21.3 = c(1, 0.99, 0.6, 
0.5)), class = "data.frame", row.names = c(NA, -4L)), structure(list(
    Year = 2015:2018, tex21.1 = c(0.2, 0.3, 0.5, NA), tex21.2 = c(NA, 
    0.4, 1.2, 1.5), tex21.3 = c(1, 0.99, 0.6, 0.5)), 
    class = "data.frame", row.names = c(NA, 
-4L)))
calculate_function <- function(x) {
  cbind(
    x[1],
    do.call(
      rbind,
      apply(
        x[-1],
        1,
        function(v) {
          data.frame(
            mean = mean(v, na.rm = TRUE),
            se = sd(v, na.rm = TRUE) / sqrt(sum(!is.na(v)))
          )
        }
      )
    )
  )
}