2017-11-17 18 views
1

目的:各セルに複数の値が含まれている(多くの場合))列を持つデータフレームをクリーンアップします。 v1のセルに含まれる値に基づいて、複数のバイナリ変数(v1_1、v1_2、v1_3など)を生成したいと考えています。 (現実:私は、複数の値を持つ多くのセルを持つ非常に大規模で醜いExcelデータセットを持っており、バイナリカラムに理想的には並べてツールを並べ替えるのが理想です。複数の値を持つ列をバイナリ変数に変換する

再現例:dplyrtidyrを用い

df <- data.frame(caseID = c(1:5), 
       v1 = c(2, 1, "1,3", 1, "2, 3")) 
df 
desired_df <- data.frame(caseID = c(1:5), 
         v1_1 = c(0, 1, 1, 1, 0), 
         v1_2 = c(1, 0, 0, 0, 1), 
         v1_3 = c(0, 0, 1, 0, 1)) 
desired_df 
+1

、[1]、as.data.frame.matrix(表(スタック(setNames(strsplit(as.character(DFの$ v1の)、 "\\ S *")dfを( 'DFをCBINDをお試しください$ caseID))[2:1]))) ' – akrun

答えて

2

溶液。

library(dplyr) 
library(tidyr) 


df2 <- df %>% 
    separate_rows(v1) %>% 
    mutate(Value = 1) %>% 
    spread(v1, Value, fill = 0) %>% 
    rename_at(vars(-caseID), funs(paste0("v1_", .))) 
df2 
# caseID v1_1 v1_2 v1_3 
# 1  1 0 1 0 
# 2  2 1 0 0 
# 3  3 1 0 1 
# 4  4 1 0 0 
# 5  5 0 1 1 
関連する問題