单个列,其中许多值由分号R分隔

时间:2016-06-20 17:04:11

标签: r

我有一个包含1000行的列。每行有5000个值,全部用分号分隔。我想将此列转换为1000 x 5000维度的矩阵。 我怎么能在R?中做到这一点?

谢谢, 亚伦

3 个答案:

答案 0 :(得分:0)

as.numeric(strsplit(A[,1],";"))

如果数据在数据框或数组中

as.numeric(strsplit(A,";"))

如果数据是矢量

答案 1 :(得分:0)

这是一种方法。

my_data <- data.frame(one_column = c("5;6;5;6;7", "6;5;3;2;5"))
my_data
        one
1 5;6;5;6;7
2 6;5;3;2;5

# split each row by a semicolon
my_list <- apply(my_data, 1, strsplit, split = ";")

# unlist and turn it into a matrix
my_matrix <- matrix(as.numeric(unlist(my_list)), nrow = nrow(my_data), 
                    ncol =length(my_list[[1]][[1]]), byrow = TRUE)
my_matrix
     [,1] [,2] [,3] [,4] [,5]
[1,]    5    6    5    6    7
[2,]    6    5    3    2    5

如果您愿意,可以指定行数和列数。在这里,我假设你确实每行都有5000个值。

答案 2 :(得分:0)

让我们开始创建一个包含1列的数据框示例 分号分隔值:

d <- data.frame(col1 = paste0(runif(1000), ";", runif(1000), ";", runif(1000)), stringsAsFactors = F)

这是数据框的样子:

head(d)
                                                    col1
1   0.20093023753725;0.399978927802294;0.404899704502895
2 0.424904063809663;0.0908958145882934;0.340853224741295
3  0.850118306931108;0.518901573261246;0.364027933450416
4 0.0212442732881755;0.760768163017929;0.146710442844778
5 0.0331723166164011;0.153021499980241;0.449281473178416
6 0.733110485365614;0.0544649658259004;0.663546974770725

以下两行代码可以产生您想要的内容:

library(stringr)

t <- str_split(d$col1, ";")
d2 <- do.call(rbind, t)

第一行生成一个列表,其中每个元素都包含拆分值。 第二行将它们以矩阵形式绑定在一起。