R的新人,我看过以前的帖子,但无法让它发挥作用。我需要每个表的V4
(每个表中的变量/列)的平均值。理想情况下,我需要一张具有每张桌子V4平均值的决赛桌。这是我到目前为止的代码:
file_list <- list.files(path = folder, pattern = "*.txt")
r <- llply(file_list, read.table, skip = 1)
一个文件夹中共有111个txt文件,我已经读取了除第一行以外的所有文件,因为它无法使用。谢谢!
答案 0 :(得分:0)
您的lapply
读取会创建一个数据框列表,每个文件读取一个。如果您只想获得每个V4的平均值,请尝试:
file_list <- list.files(path = folder, pattern = "*.txt")
r <- lapply(file_list, FUN = function(x){
df = read.table(x, skip=1)
mean(df$V4)
})
在此lapply
中,x
是来自file_list
的文件名。其内容被读入df
(使用相同的选项),然后计算V4的平均值。您将获得一个与file_list
长度相同的列表。如果您想要矢量,请将lapply
更改为sapply
。
如果V4列有任何NA,如果你想在计算平均值时跳过NAs,你会得到相同的结果,为它添加选项na.rm = T
。
答案 1 :(得分:0)
只猜测数据的输出,但这对我有用:
library(tidyverse)
df_list %>%
mutate(var4_mean = map_dbl(data, ~mean(.$var4)))
返回:
# A tibble: 2 x 2
data var4_mean
<list> <dbl>
1 <tibble [3 x 4]> 489.23667
2 <tibble [3 x 4]> 56.56667
如果你想要完整的所有var4
的单一平均值,你可以这样做:
df_list %>%
unnest() %>%
summarise(var4_mean = mean(var4))
返回:
# A tibble: 1 x 1
var4_mean
<dbl>
1 272.9017
如果您想通过可重现的示例尝试此操作,请运行以下命令:
library(tidyverse)
df_1 <- tibble(
var1 = c(1423, 3222, 2131),
var2 = c(6.27, 26.4, 18.1),
var3 = c(1461, 2112, 2531),
var4 = c(614.2, 22.41, 831.1)
)
df_2 <- tibble(
var1 = c(14, 22, 31),
var2 = c(6.2, 2.4, 8.1),
var3 = c(141, 212, 231),
var4 = c(64.2, 22.4, 83.1)
)
df_1 <- nest(df_1)
df_2 <- nest(df_2)
df_list <- list(df_1, df_2)
df_list <- bind_rows(df_list)
df_list
# Unnest the data frames and compute mean of entire var4
df_list %>%
unnest() %>%
summarise(var4_mean = mean(var4))
# Compute mean of var4 for each individual data frame
df_list %>%
mutate(var4_mean = map_dbl(data, ~mean(.$var4)))
我建议从R4DS阅读本章。它是嵌套数据框的绝佳读物。