将data.frame恢复为R中的向量

时间:2018-07-26 17:41:16

标签: r list dataframe vector

是否有一种简单而又简单的方法将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]")

3 个答案:

答案 0 :(得分:2)

data.frame已经是矢量列表(长度相等)。您可以像对待列表一样对待它。

UPDATE

答案 1 :(得分:1)

您可以使用以下内容:

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

现在您可以使用

编制索引
a[1,] 

第一个向量(数据框中的第一列),依此类推

答案 2 :(得分:1)

我怀疑您正在寻找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]\")"