2017-04-19 77 views
1

二元矩陣我有以下的文字,內容如下轉換文本中的R

#------------------ 
# CONTENTS OF TEXT 
#------------------ 

H01, H04, G02, G06, 
H01, H02, G02, H05, 
G01, H04, H01 
G09, G05 

我想這個數據在二進制轉換矩陣。我想輸出是這樣

H01 H02 H04 H05 G01 G02 G05 G06 G09 
1 0 1 0 0 1 0 1 0 
1 1 0 1 0 1 0 0 0 
1 0 1 0 1 0 0 0 0 
0 0 0 0 0 0 1 0 1 

請幫

+2

您能否在這種情況下輸入您的數據:輸入(數據)?另外,如果沒有某種警告或錯誤,您應該無法運行'read.csv(file)'。 – Abdou

+0

我已經對我的問題進行了修改 –

回答

3

你可以這樣做:用@jogo數據

d <- read.table(header=FALSE, sep='§', stringsAsFactors = FALSE, text= 
'H01, H04, G02, G06, 
H01, H02, G02, H05, 
G01, H04, H01 
G09, G05') 
s <- sort(unique(unlist(strsplit(d$V1, ', *')))) 
m <- sapply(s, grepl, x=d$V1, fixed=TRUE) 
# > m 
#  G01 G02 G05 G06 G09 H01 H02 H04 H05 
# [1,] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE 
# [2,] FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE 
# [3,] TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE 
# [4,] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE 
m[] <- as.integer(m) 
# > m 
#  G01 G02 G05 G06 G09 H01 H02 H04 H05 
# [1,] 0 1 0 1 0 1 0 1 0 
# [2,] 0 1 0 0 0 1 1 0 1 
# [3,] 1 0 0 0 0 1 0 1 0 
# [4,] 0 0 1 0 1 0 0 0 0 
1

另一個想法:

library(dplyr) 
library(tidyr) 

d %>% 
    mutate(V1 = stringi::stri_extract_all_words(V1), V2 = 1) %>% 
    unnest(V1, .id = "id") %>% 
    spread(V1, V2, fill = 0) 

其中給出:

# id G01 G02 G05 G06 G09 H01 H02 H04 H05 
#1 1 0 1 0 1 0 1 0 1 0 
#2 2 0 1 0 0 0 1 1 0 1 
#3 3 1 0 0 0 0 1 0 1 0 
#4 4 0 0 1 0 1 0 0 0 0