2016-06-20 22 views
-5

我有一列有1000行。每行有5000個值,全部以分號分隔。我喜歡將此列轉換爲1000 x 5000維的矩陣。 我如何在R中做到這一點?一列中有很多值用分號隔開,R

謝謝, 亞倫

+0

您應該爲人們提供一個[可重現的示例](http://stackoverflow.com/q/5963269/1217536)。 – gung

+1

'read.csv2' if you want a data.frame – alistaire

+0

'library(splitstackshape); cSplit(df,'V1',sep =「;」,type.convert = FALSE)' –

回答

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

如果數據是在一個數據幀或陣列

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

如果數據是一個矢量

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個值。

+0

謝謝!這工作很好:) – user2145299

+0

如果它工作,請投票解決方案,以便它被標記爲已回答。 –

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 

以下的2個行的代碼產生你想要的東西:

library(stringr) 

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

第一行生成一個列表,其中每個元素包含分割值。 第二行將它們全部綁定在一個矩陣中。