如何在R中创建矢量矢量

时间:2010-07-05 12:06:56

标签: r

我输入的数据包含这样的行:

-0.438185 -0.766791  0.695282
0.759100  0.034400  0.524807

如何在R中创建如下所示的数据结构:

[[1]]
  [1] -0.438185 -0.766791  0.695282 
[[2]]
  [1]  0.759100  0.034400  0.524807 

4 个答案:

答案 0 :(得分:20)

使用清单:

> x <- list()
> x[[1]] <- c(-0.438185, -0.766791, 0.695282)
> x[[2]] <- c(-0.759100, 0.034400, 0.524807)

> x
[[1]]
[1] -0.438185 -0.766791  0.695282

[[2]]
[1] -0.759100  0.034400  0.524807

将其视为由整数索引的地图/字典/关联数组。

如果您想获取上面的字符串并将其转换为矢量列表:

> s <- "-0.438185 -0.766791  0.695282\n0.759100  0.034400  0.524807"
> x <- lapply(strsplit(s, "\n")[[1]], function(x) {as.numeric(strsplit(x, '\\s+')[[1]])})
> x
[[1]]
[1] -0.438185 -0.766791 0.695282

[[2]]
[1] 0.759100 0.034400 0.524807

我正在使用strsplit按换行分割,然后再将strsplit应用于每一行。 as.numeric是从字符串转换为数字而[[1]]的存在是因为strsplit输出了一个我们并不想要的列表。

答案 1 :(得分:3)

假设您的数据采用名为df的数据框的形式:

library(plyr)
alply(as.matrix(df),1,"[")

给出

$`1`
       V1        V2        V3 
-0.438185 -0.766791  0.695282 

$`2`
      V1       V2       V3 
0.759100 0.034400 0.524807 

答案 2 :(得分:3)

如果从文件中读取,例如data.txt,则可以这样做:

lapply(readLines('data.txt'),function(x) as.numeric(strsplit(x,' +')[[1]]))

答案 3 :(得分:2)

StompChicken是对的,只需用列表来做。虽然我想添加一个可以帮助您从现有结构中学习的小技巧:

 dput(dframe) 

输出一些代码来创建相应的data.frame或vector。尝试使用任何向量,框架或列表,你会看到它是如何创建的,例如:

x= c(1,2,3,4)
dput(x)

回声c(1,2,3,4)