1
各行に複数の要素が含まれているデータフレームがあります。データフレームはコンマで区切ります。各行の要因数と要因数は不明です。私は1つのホットエンコードする必要がこの列は、すべての独自の要因は、独自の列を占有するような方法です。私は以下の解決策を持っていますが、より良い、より洗練されたソリューションがあると確信しています。次に例を示します。各行に複数の要素を含むデータフレームを1つホットエンコードします。
#one hot encode multiple factors in each row
library(stringr)
library(caret)
library(splitstackshape)
#create toy data frame
set.seed(123)
factor.num <- sample(3:6,1) #how many factors in each row
factors <- letters[sample(1:26,4)]
df1 <- data.frame(fact = replicate(100,paste(sample(factors,sample(1:factor.num,1)),collapse = ", ")))
df1
#split "fact" into uknown number of columns
df1_split <- cSplit(df1,"fact",",")
# convert all columns into dummy columns
dmy <- dummyVars(" ~ .", data = df1_split)
trsf <- data.frame(predict(dmy, newdata = df1_split))
#collect all columns with unique factors
final_df <- as.data.frame(matrix(0, ncol = factor.num, nrow = 100))
colnames(final_df) <- paste0("all_",factors)
for (i in 1:factor.num) {
fac_cols <- colnames(trsf)[str_detect(colnames(trsf),paste0("(?<=\\.)",factors[i],"$"))]
final_df[,paste0("all_",factors[i])] <- apply(trsf[,fac_cols],1,function(x) as.numeric(any(x==1,na.rm=T)))
}
final_df