data.frame中的5个列表得到它们的均值,sd,删除异常值

时间:2016-12-22 18:20:23

标签: r list dataframe mean lapply

我有一个 5个列表

的data.frame

每个列表有3列:

T_C是TEST或CONTROL

的指标

id,T_C,SPEND

我知道如何使用lapply来获得T或C的平均值,但是你如何使用多个列表呢?

$echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

...

对于单个列表,我可以这样做吗?

dfList <- lapply(tableListBase, function(t) fetch(dbSendQuery(con, paste0("SELECT * FROM ",  t))))

dfList <- setNames(dfList, tableListBase).

我正在学习: - )

我的目标是暂时在这5个列表T / C上获得mean(),sd()。

我的最终目标是识别:mean - 3 sd()和mean + 3 sd()并从这6个列表集中删除它们并在删除异常值后创建一个新列表。

我知道如何在更加手动的正式行中执行此操作,而不是更多行代码,但是想学习如何使用更多means <- tapply(NET_SPEND, TC_INDICATOR, mean) 方法: - )

1 个答案:

答案 0 :(得分:1)

您可以采取以下几种方法。我已经订购过哪一个我最有可能使用的那个:

# Make a list of 5 data frames.  I'll use `mtcars` for convenience, since 
# I don't have your data.

X <- lapply(1:5,
            function(i) mtcars[sample(1:nrow(mtcars),
                                      size = nrow(mtcars), 
                                      replace = TRUE), ])

library(dplyr)

# Bring all of the tables together and summarise
mapply(function(df, i){ df$tbl_id <- i; df},
       X,
       seq_along(X),
       SIMPLIFY = FALSE) %>%
  bind_rows() %>%
  group_by(tbl_id, am) %>%
  summarise(mean = mean(mpg),
            sd = sd(mpg))

# Make a list of summaries
lapply(X,
       function(df) 
       {
         df %>%
           group_by(am) %>%
           summarise(mean = mean(mpg),
                     sd = sd(mpg))
       })


# Run tapply separately for the means and sds
mean_list <- 
  lapply(X,
         function(df)
         {
           tapply(df$mpg, df$am, mean)
         }
  )

sd_list <- 
  lapply(X,
         function(df)
         {
           tapply(df$mpg, df$am, sd)
         }
  )