【问题标题】:Convert list returned by sapply() to a data.frame将 sapply() 返回的列表转换为 data.frame
【发布时间】:2015-06-10 00:40:32
【问题描述】:

我有一个由 sapply() 返回的列表

$my.list <- sapply()  
$my.list  
"var1" "var2" "var3"  
 1.1    2.5    3.2

理想的结果是将my.list转化为数据框df

$df  
"var1"  1.1  
"var2"  2.5  
"var3"  3.2

我已尝试对 my.list 的每一行进行“子集化”,如下所示:

$p1 <- names(my.list)  
$p1  
   "var1" "var2" "var3"  
$p2 <- as.vector(my.list)
$p2 
   1.1 2.5 3.2

但后来我没有进一步的运气将这些行向量 cbind/rbind-ing 到一个数据框中。有什么想法/建议吗?谢谢。

【问题讨论】:

  • 编辑:理想的结果将有 $ dim(df) return: 3 2 -- 即 2 个变量的 3 个观察值。
  • 这里的两个变量是什么? varnamevalue?

标签: r list dataframe sapply


【解决方案1】:

我不确定这是否是您需要的。

my.list <- as.data.frame(sapply(trees,mean))
my.list <- cbind(my.list,rownames(my.list))
rownames(my.list) <- NULL

我相信可能还有其他一些聪明的方法可以做到这一点!

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您可以使用stack。在这里,我组成了一个命名的“列表”(实际上是一个向量),您可能会从sapply 获得。请注意,即使您的数据实际上是一个列表,这也是有效的。

    > my.list <- setNames(1:3, letters[1:3])
    > my.list
    a b c 
    1 2 3
    > stack(my.list)
      values ind
    1      1   a
    2      2   b
    3      3   c
    

    【讨论】:

    • stack() 看起来很有用,只是它保留了 sapply() 返回的 my.list 的元素“ind”的“级别”。假设:ps
    【解决方案3】:

    不是 100% 这就是你想要的,这是你的意思吗?

    my.list <- sapply(letters[1:3], toupper)
    data.frame(t(my.list))
    

    (下次请提供您的意见,以便更容易回答)

    【讨论】:

    • 如果 df
    • 这实际上是对 3 个变量的观察。根据您的输入,这似乎是有道理的 - 您有 "var1" "var2" 和 "var3" ,每个都有一个值。我不确定您希望输出是什么样子...请更清楚。
    【解决方案4】:

    p1p2 绑定到 df 类似于问题#12787551

    解决方法如下: 去除 p1 中的水平(因子)

    $p1 <- as.numeric(names(my.list))
    

    然后构造df

    $df <- cbind(data.frame(p1),p2)
    

    然后会返回理想的结果:

    $dim(df)
    3 2
    $df$p1
    var1 var2 var3
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多