将整个数据帧转换为一个长列(向量)

时间:2018-03-14 12:51:20

标签: r

我想将数字(包括NA)数据框的全部内容转换为一列。实现以下目标最明智的方法是什么?

>df <- data.frame(C1=c(1,NA,3),C2=c(4,5,NA),C3=c(NA,8,9))
>df
     C1 C2 C3
  1  1  4 NA
  2 NA  5  8
  3  3 NA  9

>x <- mysterious_operation(df)
>x
[1] 1 NA 3 4 5 NA NA 8 9

我想计算这个向量的平均值,所以理想情况下我想删除mysical_operation中的NA - 我正在处理的数据框非常大,所以它可能是一个好主意。

4 个答案:

答案 0 :(得分:3)

您正在寻找的神秘操作称为unlist

> df <- data.frame(C1=c(1,NA,3),C2=c(4,5,NA),C3=c(NA,8,9))
> unlist(df, use.names = F)
[1]  1 NA  3  4  5 NA NA  8  9

答案 1 :(得分:3)

这里有# using invoke, a wrapper around do.call purrr::invoke(c, df, use.names = FALSE) # similar to unlist, reduce list of lists to a single vector purrr::flatten_dbl(df) 的几种方式:

[1]  1 NA  3  4  5 NA NA  8  9

两者都返回:

=N"'itemview'"

答案 2 :(得分:1)

我们可以使用data.frame并创建一个列df1 <- data.frame(col =unlist(df))

{{1}}

答案 3 :(得分:1)

只是为了好玩。当然unlist是最合适的功能。

  1. 替代

    stack(df)[,1]

  2. 替代

    do.call(c,df)

    do.call(c,c(df,use.names=F)) #unnamed version

  3. 也许他们更神秘。