Pythonで処理しているコードがありましたが、R言語のコードが見つかりませんでした。
あるサイトのPythonのコードを参考にさせていただき、R言語で処理できるようにしてみました。
たどたどしいR言語による翻訳ですが、備忘録として記録しておきます。
選択肢ごとに論理値の回答を「1-0」に変換して行列の形にするところをもっと簡単にできるのではないかと思いますが、
何とか無理やり処理しています。
ツイッターデータのツイートに含まれるハッシュタグリストの処理にも使えそうなのでR言語のコードにしてみました。
※'複数回答' = 'Multiple Answers'
【R言語による複数回答データの処理】
sample <- c('Japan,China,Korea','China,Korea,America,Germany,France','America,Germany,France','Japan,China,Korea,America','China,America,Germany,France','Germany,France','China,America')
df_sample <- as.data.frame(sample)
colnames(df_sample) <- '複数回答'
df_sample
answers <- strsplit(df_sample$複数回答, ",")
answers_list <- unlist(answers)
answers_list <- unique(unlist(answers))
answers_list
ma_df <- NULL
for (i in 1:length(answers)) {
for (j in 1:length(answers_list)) {
tempanswer <- answers_list[j] %in% answers[[i]]
ma_df <- rbind(ma_df,tempanswer)
}
}
ma_dfdm <- ma_df*1
ma_dfdm
slrnum1 <- length(answers_list)
df_ma <- NULL
for (i in 1:slrnum1) {
tempma <- ma_dfdm[seq(i,nrow(ma_dfdm),slrnum1), ]
df_ma <- cbind(df_ma,tempma)
}
colnames(df_ma) <- answers_list
df_ma
df_macomp <- cbind(df_sample,df_ma)
df_macomp
rownames(df_macomp) <- NULL
df_macomp
############END#################################
【下記は部分的に改良したパターンです:論理値のリストからダミー変数行列を作成する部分をより単純化しています:結果は同じです】
-----------------------------------------------------------------------------
【下記のコードで「1」を選択肢の文字列に置き換えることができます。結果は下図のようになります。】
############END#################################
【下記は部分的に改良したパターンです:論理値のリストからダミー変数行列を作成する部分をより単純化しています:結果は同じです】
################################################
ma_df <- NULL
for (i in 1:length(answers)) {
for (j in 1:length(answers_list)) {
tempanswer <- answers_list[j] %in% answers[[i]]
ma_df <- append(ma_df,list(tempanswer))
}
}
storage.mode(ma_df) <- "integer"
mamatrix <- matrix(ma_df, nrow=length(answers_list), ncol=length(answers))
mamatrixt <- t(mamatrix)
ma_dfdm01 <- as.data.frame(mamatrixt)
colnames(ma_dfdm01) <- answers_list
df_macomp <- cbind(df_sample,ma_dfdm01)
df_macomp
-----------------------------------------------------------------------------
【下記のコードで「1」を選択肢の文字列に置き換えることができます。結果は下図のようになります。】
df_matxt <- NULL
qmanamelist <- NULL
for (i in 1:length(answers_list)) {
anstxt <- answers_list[i]
df_matxt0 <- ma_dfdm01[,i]
qmatemp <- df_matxt0 %>% str_replace_all(.,"1",anstxt)
df_matxt <- rbind(df_matxt,qmatemp)
qmaname <- assign(paste0("q_",i),paste0("qma_",i))
qmanamelist <- rbind(qmanamelist,qmaname)
}
df_matxtt <- t(df_matxt)
colnames(df_matxtt) <- t(qmanamelist[,1])
df_matxtt
df_macomp1 <- cbind(df_sample,df_matxtt)
df_macomp1
-----------------------------------------------------------------------
0 件のコメント:
コメントを投稿