合并多个列表以在R中创建数据框

时间:2020-05-29 16:27:30

标签: r list merge

如果已经在其他地方提出了要求,请提前道歉,但是我尝试了不同的尝试,到目前为止没有任何效果。

我研究了23种测量空气污染的设备的数据。对于每个设备,我对4个参数(平均值,最大值,最小值和标准差)感兴趣。我最终获得了4个带有23个值的列表,代表每个设备的参数。

    var_names <- ls(envir = globalenv(), pattern = "^Device")
    Corrected_values<- mget(var_names)

    Device_mean <- lapply(Corrected_values, mean)
    Device_max <- lapply(Corrected_values, max)
    Device_min <- lapply(Corrected_values, min)
    Device_sd <- lapply(Corrected_values, sd)

现在,我希望创建一个数据框“设备”,它将这4个列表合并在一起。然后,该具有4列23行的数据框(或矩阵)将可以导出以供进一步使用。到目前为止,我的所有尝试都导致矩阵错误。

    # rename the column names
    cols <- c("Mean", "Maximum", "Minimum", "Stdv")

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

这是基本的R方式。

var_names <- ls(envir = globalenv(), pattern = "^Device")
Corrected_values <- mget(var_names)
f <- function(x){
  data.frame(Mean = mean(x), Maximum = max(x), Minimum = min(x), Stdv = sd(x))
}

do.call(rbind, Map(f, Corrected_values))
#         Mean Maximum Minimum      Stdv
#Device1 5.006     5.8     4.3 0.3524897
#Device2 6.588     7.9     4.9 0.6358796
#Device3 5.936     7.0     4.9 0.5161711

数据

Device1 <- iris[iris$Species == 'setosa', 'Sepal.Length']
Device2 <- iris[iris$Species == 'virginica', 'Sepal.Length']
Device3 <- iris[iris$Species == 'versicolor', 'Sepal.Length']

答案 1 :(得分:0)

实际上,瑞·巴拉达斯(Rui Barradas)提出的建议是可行的,但这似乎是因为

    f <- function(x){
      data.frame(Mean = mean(x), Maximum = max(x), Minimum = min(x), Stdv = sd(x))
    }

使用脚本中预先创建的4个列表自动识别“平均值=平均值(x),最大值=最大值(x),最小值=最小值(x),标准差= sd(x)”的含义。 不幸的是,如果我希望添加创建的其他列表,则无法使用。确实,现在假设我有8个列表,而不是之前给出的前4个列表:

var_names <- ls(envir = globalenv(), pattern = "^Device")
Corr_values<- mget(var_names)

Device_mean <- lapply(Corr_values, mean) #list 1
Device_max <- lapply(Corr_values, max) #list2
Device_min <- lapply(Corr_values, min) #list3
Device_sd <- lapply(Corr_values, sd) #list4

hours_per_year <- 365*24
multiply <- function(x, factor) {
x * hours_per_year}
Device_average_annual_dose <- lapply(Device_mean, multiply, factor = hours_per_year) #list5

var_names_dates <- ls(envir = globalenv(), pattern = "^Date")
Corr_dates<- mget(var_names_dates)
Device_hours_with_values <- lapply(Corr_dates, length) #list6

a <- (100/hours_per_year)
multiply <- function(x, factor) {
x * a}
Device_availability <- lapply(Device_hours_with_values, multiply, factor = a) #list7

subtract_me = 100
Device_unavailability <- lapply(Device_availability, function(x, subt_amnt) subt_amnt - x,subt_amnt = subtract_me) #list8

这些8个列表正确存储在R中,但是在这种情况下,当我尝试使用8个列表名称来建议我合并8个列表时,我会收到错误消息:

    Error in max(x) : invalid 'type' (list) of argument

我不明白,因为这些正是我希望合并的一些列表...