如何将函数应用于多列并随后生成均值?

时间:2018-12-20 12:21:37

标签: r rstudio

我有一个数据集,如下所示。对于此数据集,我有一个函数,该函数为列创建一个值。我的问题是如何将此函数应用于2至2536的库仑,然后取所有结果的平均值。

ids V1 V2 V3 V4 ......
12  1  1  2  NA
13  2  1  3  1
18  NA 2  3  3
19  1  1  NA 1

AI <- function(AI) {
  ((sort(table(AI),decreasing=TRUE)[1])-0.5*
     (sum(!is.na(AI))
      - (sort(table(AI),decreasing=TRUE)[1]))) /sum(!is.na(AI))
}

2 个答案:

答案 0 :(得分:0)

像这样吗?

library(tidyverse)

df=read_table("ids V1 V2 V3 V4 
12  1  1  2  NA
13  2  1  3  1
18  NA 2  3  3
19  1  1  NA 1")
df %>% 
  select(contains('V')) %>% 
  mutate_at(vars(contains('V')),funs( (.-0.5*sum(.,na.rm = T))/sum(.,na.rm = T) )) %>% 
  replace(is.na(.),0) %>% as.matrix() %>% 
  mean

答案 1 :(得分:0)

首先,构建您的功能:

 my_func <- function(x) x*2

然后使用dplyr库:

library(dplyr)         # a part  of tidyverse
df %>% 
  mutate_at( vars(2:5), my_func ) %>% # apply my_func to columns 2 to 5
  summarise_all( mean, na.rm = T)     # apply mean to all columns

#   ids       V1  V2       V3       V4
#  15.5 2.666667 2.5 5.333333 3.333333

希望有帮助!