0

現在、テーブルの各行に不規則な量のデータが関連付けられるように、バスケット形式でテーブルを設定しています。そのような:

01,item1,item2,item3
02,item1,item2,
03,item1,item2,item3,item4
04,item1

ただし、各行に 1 つの項目のみを含む正規化されたトランザクション形式に変更する必要があります。そのような:

01,item1
01,item2
01,item3
02,item1
02,item2
03,item1

...等々。これを行う簡単な自動化またはプログラムによる方法はありますか? データは現在、さまざまなファイル タイプでエクスポートできる MySQL データベースにあり、これを行うために RStudio と Microsoft Excel にもアクセスできます。私が見つけた RStudio 用のすべてのトランザクション リソースは、データが既に 2 番目の形式であると想定しています。

4

2 に答える 2

1

データセットをRに読み込むと、データセットがどのように見えるかを理解していると思います。つまり、行を同じ長さにするためにNAが埋められた長方形のデータフレームになります。したがって、これで問題は解決するはずです。

#Create your dataset (this step is not for you)
row1 = c("01","item1","item2","item3",NA)
row2 = c("02","item1","item2",NA,NA)
row3 = c("03","item1","item2","item3","item4")
row4 = c("04","item1",NA,NA,NA)

Data = rbind(row1,row2,row3,row4)

#Now do the reconstruction (this step is for you)
col1 = NULL
col2 = NULL

for(i in 1:nrow(Data)){
    col1 = c(col1,rep(Data[i],ncol(Data)-1))
    col2 = c(col2,Data[i,-1])
}

NewData = cbind(col1,col2)[!is.na(col2),]

だから、あなたが得るものは次のとおりです

> Data
     [,1] [,2]    [,3]    [,4]    [,5]   
row1 "01" "item1" "item2" "item3" NA     
row2 "02" "item1" "item2" NA      NA     
row3 "03" "item1" "item2" "item3" "item4"
row4 "04" "item1" NA      NA      NA     
> 
> NewData
      col1 col2   
 [1,] "01" "item1"
 [2,] "01" "item2"
 [3,] "01" "item3"
 [4,] "02" "item1"
 [5,] "02" "item2"
 [6,] "03" "item1"
 [7,] "03" "item2"
 [8,] "03" "item3"
 [9,] "03" "item4"
[10,] "04" "item1"

うまくいけば、それが役に立ちます。

于 2013-02-11T20:35:28.247 に答える
0

この質問は、これとよく似ています。@DWin がコメントで言及しているように、分割リストに適用する必要がありますpaste( . , . sep=",")

xx <- read.table(text ='01,item1,item2,item3
02,item1,item2,
03,item1,item2,item3,item4
04,item1')

unlist(lapply(strsplit(as.character(xx$V1), ','), 
       function(x) paste(x[1],x[-1],sep=',')))

[1] "01,item1" "01,item2" "01,item3" "02,item1" "02,item2" "03,item1" "03,item2" "03,item3" "03,item4" "04,item1"
于 2013-02-11T22:14:48.217 に答える