0

我正在合并一些存储在列表中的数据框。为此,我正在使用带有.df命令的 for 循环。现在,我想suffixespaste循环内部使用数据框的名称。

有没有办法,使用for ( .df in [list]) {我可以减去当前在.df循环内的数据框的名称的命令?

假设我有这个包含三个数据框的列表,

a <- list(A = data.frame(a=runif(2), b=runif(2)), 
          B = data.frame(a=runif(2), b=runif(2)), 
          C = data.frame(a=runif(2), b=runif(2)))
a

$A
          a         b
1 0.2833226 0.6242624
2 0.1741420 0.1707722

$B
           a         b
1 0.55073381 0.6082305
2 0.08678421 0.5192457

$C
           a         b
1 0.02788030 0.1392156
2 0.02171247 0.7189846

现在,我想使用这个循环,

for ( .df in a) {
 print(['command I do not know about'])
                }

然后让 [我不知道的命令] 打印出 A、B、C(即 中的数据框的名称.df)。

我可以这样做吗?

更新 2012-04-28 20:11:58 PDT

这是我使用上面的简单循环从我的输出中截取的部分,

for ( .df in a) {
 print(['command I do not know about'](a))
                }

[1] "A"
[1] "B"
[1] "C"

我可以使用,

for (x in names(a)) {
    print(x)
    }

但由于我正在做的事情的性质,我想for ( .df in [list]) {在我的 for 循环中使用该命令。

4

2 回答 2

4

要同时提取名称和值,您不能遍历这些值。您可以遍历索引或名称:

# Loop over indices (faster, more cumbersome)
ns <- names(a)
for(i in seq_along(a)) {
   v <- a[[i]]     # extract value
   n <- ns[[i]]    # extract name
   cat(n, ": \n")
   str(v)
}

# Loop over names (easy but slower)
for(n in names(a)) {
   v <- a[[n]]     # extract value
   cat(n, ": \n")
   str(v)
}

...循环名称和提取值对于长向量可能非常慢(它具有 n^2 时间复杂度)。

于 2012-04-29T03:41:42.597 回答
0

不是 for 循环,而是 lapply 但与 for 循环类似。也许这会有所帮助,尽管我很困惑,因为我认为 mrdwab 的答案就是这样。

FUN <-function(i){
    x <- a[[i]]
    data.frame(name=rep(names(a)[[i]], nrow(x)), x)
}

LIST <- lapply(seq_along(a), FUN)

do.call("rbind", LIST)

产量:

  name          a         b
1    A 0.90139624 0.9739355
2    A 0.34311009 0.6621689
3    B 0.07585535 0.6010289
4    B 0.37292887 0.7260832
5    C 0.17814913 0.1433650
6    C 0.24586101 0.1741114
于 2012-04-29T03:29:44.003 回答