【问题标题】:R dynamic data frame names in Loop循环中的R动态数据框名称
【发布时间】:2017-05-22 10:47:59
【问题描述】:

我有一些类似的 df

df1
df2
df3
...
dfn

那么如何使用循环使用我的数据框

示例:

循环(i in 1:n)
{
摘要 (paste0 ("df",i)) # =====> 它不起作用!

}

【问题讨论】:

    标签: r dataframe dynamic


    【解决方案1】:

    我们可以使用mget返回list中的字符串对象的值,然后用lapply循环遍历list得到summary

    lapply(mget(paste0("df", seq_len(n))), summary)
    

    如果我们使用for循环,请确保我们将结果存储在一个对象中,最好是list,使用get返回对象的值,获取summary并存储它作为'out'对象中的list元素

    out <- vector('list', n)
    for(i in seq_len(n)) {
       out[[i]] <- summary(get(paste0("df", i)))
     }
    

    注意:最好将所有data.frame 包含在list 中。但是,如果我们想使用 for 循环更新全局环境中的原始对象,请使用 assign

    for(i in seq_len(n)) {
      assign(paste0("df", i), get(paste0("df", i))[-(1:3)])
     }   
    

    或者这可以在使用lapply 之后使用list2env 完成

    list2env(lapply(mget(paste0("df", seq_len(n))), function(x) x[-(1:3)]), .GlobalEnv)
    

    数据

    df1 <- data.frame(col1 = 1:3, col2 = 4:6, col3 = 7:9, col4 = 10:12)
    df2 <- data.frame(col1 = 1:15, col2 = 16:30, col3 = 31:45, col4 = 46:60)
    n <- 2
    

    【讨论】:

    • 干得好!
      我认为得到就是答案!
    • 但是如何将此代码 df1 转换为动态的 get(paste0("df ", i))
    • @TuongNguyen 如果您需要在循环中对数据集进行子集化,lapply(mget(paste0('df', seq_len(n))), function(x) x[-(1:3)])for 循环 for(i in seq_len(n)) { out[[i]] &lt;- get(paste0("df", i))[-(1:3)] }
    • 出了什么问题[[i]]?我只需要 df1 :)
    • @TuongNguyen 我认为您需要一个 list 的 data.frame 作为输出。如果你只需要df1 就做df1[-(1:3)] 为什么选择get 之类的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2018-09-05
    • 2011-11-22
    相关资源
    最近更新 更多