【问题标题】:Revert data.frame back to vectors in R将 data.frame 恢复为 R 中的向量
【发布时间】:2018-07-26 17:41:15
【问题描述】:

有没有一种简单、简单的方法可以将 data.frame 恢复为向量?

考虑下面的示例数据框:

df<-data.frame(
SeqName=c("1", "2", "3", "4", "5", "6"),
Length=c("440", "511", "1087", "686", "867", "632"),
Cys=c("3", "2", "2", "2", "2", "4"),
NT=c("[NA]", "[B]", "[B]", "[B]", "[B]", "[B]"),
NR=c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]"),
RefSeq=c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")
)

是否有一些神奇的功能可以将其还原为向量?

magical.function(df)

[1]c("1", "2", "3", "4", "5", "6")
[2]c("440", "511", "1087", "686", "867", "632")
[3]c("3", "2", "2", "2", "2", "4")
[4]c("[NA]", "[B]", "[B]", "[B]", "[B]", "[B]")
[5]c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")
[6]c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")

【问题讨论】:

  • as.list(df),虽然我猜这对df没有好处。
  • @Frank 我实际上是在尝试让另一段代码工作,所以这是我的目标。见stackoverflow.com/questions/51543803/…
  • lapply( df, cat) 虽然只是显示它。如果你想要一个逗号分隔的版本,它可能是lapply(df, deparse)

标签: r list dataframe vector


【解决方案1】:

data.frame 已经是向量列表(等长)。您可以将其视为列表。

class(mtcars)
# [1] "data.frame"
is.list(mtcars)
# [1] TRUE
mtcars[["cyl"]]
# [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
for (x in mtcars) {
  print(length(x))
}
# [1] 32
# [1] 32
# [1] 32
# [1] 32
# [1] 32
# [1] 32
# [1] 32
# [1] 32
# [1] 32
# [1] 32
# [1] 32

【讨论】:

    【解决方案2】:

    我怀疑您正在寻找dput。这使您可以获取 R 对象的文本表示。

    但是,首先请注意,您的原始字符向量将通过data.frame 转换为因子,因此您需要考虑这一点并在需要时转换回来。其次,dput 的输出既可以直接写入文件,也可以写入控制台(可以复制粘贴)。您可能需要使用invisible 以避免其他返回的对象造成混淆。

    invisible(lapply(df, function(x) dput(as.character(x))))
    c("1", "2", "3", "4", "5", "6")
    c("440", "511", "1087", "686", "867", "632")
    c("3", "2", "2", "2", "2", "4")
    c("[NA]", "[B]", "[B]", "[B]", "[B]", "[B]")
    c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")
    c("[NA]", "[B][M]", "[B]", "[B][M]", "[B][M]", "[NA]")
    

    如果您想将文本表示形式存储在字符向量中,可以使用capture.output,但请注意向量中的引号将被转义。

    capture.output(invisible(lapply(df, function(x) dput(as.character(x)))))
    [1] "c(\"1\", \"2\", \"3\", \"4\", \"5\", \"6\")"                       
    [2] "c(\"440\", \"511\", \"1087\", \"686\", \"867\", \"632\")"          
    [3] "c(\"3\", \"2\", \"2\", \"2\", \"2\", \"4\")"                       
    [4] "c(\"[NA]\", \"[B]\", \"[B]\", \"[B]\", \"[B]\", \"[B]\")"          
    [5] "c(\"[NA]\", \"[B][M]\", \"[B]\", \"[B][M]\", \"[B][M]\", \"[NA]\")"
    [6] "c(\"[NA]\", \"[B][M]\", \"[B]\", \"[B][M]\", \"[B][M]\", \"[NA]\")"
    

    【讨论】:

      【解决方案3】:

      您可以使用以下内容:

      a <- apply(df,1,as.vector)
      

      现在您可以使用

      进行索引
      a[1,] 
      

      对于第一个向量(数据框中的第一列)等等

      【讨论】:

      • 这是一种有趣的方法!它仍然作为要在第二步转换的矩阵出现。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 2015-05-16
      • 2011-10-27
      • 2021-08-17
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多