r编程 - 如何根据唯一字符将矢量的每个元素拆分为子集

时间:2015-08-29 04:24:42

标签: r

我有一个包含众多元素的向量。每个元素都是一串字符。例如,请考虑以下向量:

[1] "1 \t1.02  \t2.2 \t1.2 \t1.01 \t1.08 \t785 \t"                
[2] "2 \t1.03  \t5 \t2.6 \t1.5 \t1.01 \t948 \t"             
[3] "3 \t1.03  \t11 \t2.9 \t1.6 \t1.01 \t942 \t"              
[4] "4 \t1.04  \t7 \t3.7 \t1.6 \t1.01 \t848 \t"

我想将此向量转换为数据框。每个元素代表一行。注意在向量的每个元素中,是文本的组合\ t;这代表一列的结尾。在上面的例子中,向量将成为如下所示的数据框:

    C1   C2   C3   C4    C5     C6     C7
1   1   1.02  2.2  1.2   1.01   1.08   785                
2   2   1.03  5    2.6   1.5    1.01   948             
3   3   1.03  11   2.9   1.6    1.01   942              
4   4   1.04  7    3.7   1.6    1.01   848 

提前致谢

1 个答案:

答案 0 :(得分:1)

扩展@RichardScriven的评论,你可以像这样在你的案例中获得一个数据框:

df <- read.table(text=sapply(1:length(v), function(x) c(v[x],"\n")))
names(df) <- paste0("C",1:ncol(df))
#> df
#  C1   C2   C3  C4   C5   C6  C7
#1  1 1.02  2.2 1.2 1.01 1.08 785
#2  2 1.03  5.0 2.6 1.50 1.01 948
#3  3 1.03 11.0 2.9 1.60 1.01 942
#4  4 1.04  7.0 3.7 1.60 1.01 848

第一行的内部部分sapply连接向量以创建单个字符串,但是附加的&#34; \ n&#34; s表示每行的结尾(行) 。带有选项read.table()的函数text=将生成的字符串转换为data.frame。

第二行用于根据请求分配列的名称。

数据

v <- vector()
v[1] <- "1 \t1.02  \t2.2 \t1.2 \t1.01 \t1.08 \t785 \t"
v[2] <- "2 \t1.03  \t5 \t2.6 \t1.5 \t1.01 \t948 \t"
v[3] <- "3 \t1.03  \t11 \t2.9 \t1.6 \t1.01 \t942 \t"
v[4] <- "4 \t1.04  \t7 \t3.7 \t1.6 \t1.01 \t848 \t"