4

現在、次の形式のデータがあります(これは、1列、4行のマトリックスであることに注意してください)。

aa|bb  
bb|cc|ee|ee  
cc  
cc|ee

列名がaa、bb、cc、dd、およびeeになるように表示したいと思います。そして、各行が上記の一致する行に各文字列が存在した回数をカウントするように、4つの行が必要です。

すなわち)

aa bb cc dd ee  
 1  1  0  0  0  
 0  1  1  0  2  
 0  0  1  0  0   
 0  0  1  0  1 

誰かがRでこれを行う方法を知っていますか?私は自分の試みを投稿しますが、それは醜くて複雑になっています。どんな助けでも大歓迎です。

前もって感謝します。

4

1 に答える 1

4

ここにアイデアがあります:

# (You'll use as.vector() on your matrix to get the vector x.)
x <- c("aa|bb", "bb|cc|ee|ee", "cc", "cc|ee") 

levs <- c("aa", "bb", "cc", "dd", "ee")
ll <- strsplit(x, "\\|")
t(sapply(ll, function(X) table(c(levs, X)))) - 1
#      aa bb cc dd ee
# [1,]  1  1  0  0  0
# [2,]  0  1  1  0  2
# [3,]  0  0  1  0  0
# [4,]  0  0  1  0  1

これにより、コードの最後の行が何をするかが(少なくとも少しは)明確になる可能性があります。

table(c(levs, c("dd", "cc", "cc", "cc"))) - 1
# 
# aa bb cc dd ee 
#  0  0  3  1  0 
于 2012-10-26T23:19:27.427 に答える