【问题标题】:Save lapply output as data frame loop将 lapply 输出保存为数据帧循环
【发布时间】:2014-08-13 12:32:04
【问题描述】:

我在 R 中有以下数据:

dat <- read.table(text="
city var value
a   var1    0.19
b   var1    0.67
c   var1    0.19
a   var2    0.14
b   var2    0.38
c   var2    0.27
a   var3    0.59
b   var3    0.42
c   var3    0.27
a   var4    0.28
b   var4    0.37
c   var4    0.91
", header=TRUE)

我需要创建城市 b 与其他城市的不同数据框(例如城市 b 与城市 a,城市 b 与城市 c 等)。 Andrie 设法通过lapply 函数实现了这一点。

lapply(
  setdiff(levels(dat$city), "b"),
  function(i){
    ret <- dat[dat$city %in% c("b", i), ]
    ret[order(ret$var, ret$city), ]
  })

然后我得到了我需要的输出,但我不知道如何将每个 [[i]] 保存为不同的数据帧。例如。 [[1]] 将是 citybcitya,[[2]] 将是 citybcityc,等等。

[[1]]
   city  var value
2     b var1  0.67
1     a var1  0.19
5     b var2  0.38
4     a var2  0.14
8     b var3  0.42
7     a var3  0.59
11    b var4  0.37
10    a var4  0.28

[[2]]
   city  var value
2     b var1  0.67
3     c var1  0.19
5     b var2  0.38
6     c var2  0.27
8     b var3  0.42
9     c var3  0.27
11    b var4  0.37
12    c var4  0.91

如果没有 for 循环,我如何实现它?

【问题讨论】:

    标签: r for-loop dataframe apply lapply


    【解决方案1】:

    使用list2env,您需要先保存lapply 结果,然后为列表对象命名:

    temp <- lapply(
      setdiff(levels(dat$city), "b"),
      function(i){
        ret <- dat[dat$city %in% c("b", i), ]
        ret[order(ret$var, ret$city), ]
      })
    
    names(temp) <- c("citybcitya", "citybcityc")
    list2env(temp, envir = .GlobalEnv)
    
    citybcitya
    #    city  var value
    # 1     a var1  0.19
    # 2     b var1  0.67
    # 4     a var2  0.14
    # 5     b var2  0.38
    # 7     a var3  0.59
    # 8     b var3  0.42
    # 10    a var4  0.28
    # 11    b var4  0.37
    
    citybcityc
    # city  var value
    # 2     b var1  0.67
    # 3     c var1  0.19
    # 5     b var2  0.38
    # 6     c var2  0.27
    # 8     b var3  0.42
    # 9     c var3  0.27
    # 11    b var4  0.37
    # 12    c var4  0.91
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2020-02-18
      • 2013-03-07
      • 2012-05-22
      • 2020-08-05
      相关资源
      最近更新 更多