Я хотел бы объединить столбцы без повторения комбинации столбцов. У меня есть пример ниже, чтобы объяснить, что я пытаюсь сделать
Предположим, что у меня есть фрейм данных с 3 столбцами, и я хотел бы создать больше столбцов (которые представляют собой комбинацию из 2) на основе исходных столбцов в виде объединения двух столбцов
Пример df
V1 <- as.character(c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"))
V2 <- as.character(c("No","Yes","Yes","No","No","No","Yes","Yes","Yes","No"))
V3 <- as.character(c('Alpha',"Yes",'NA','Beta','NA',"Yes",'NA',"Yes","Yes",
'Something','Else'))
df_sample <- as.data.frame(cbind(V1, V2, V3))
df_sample
Теперь я хотел бы получить следующее в качестве вывода для новых столбцов (показывая результаты для первых 2 строк и имена нужных столбцов)
V1_V2 V1_V3 V2_V3
A_NO A_Alpha No_Alpha
A_Yes A_Yes Yes_Yes
Я попытался создать цикл со следующей функцией, но у меня есть 5 новых столбцов вместо 3, как V1_V3 повторяется с V3_V1. Я пытаюсь понять, как мы можем это исправить. Также, если есть лучший способ для решения
str_eval=function(x) {return(eval(parse(text=x)))}
cat_cols <- c('V1','V2','V3')
for (i in (1:length(cat_cols))){
for (j in (1:length(cat_cols))){
if (i != j){
col_name <- paste(colnames(df_sample)[i],"_",colnames(df_sample)[j],sep="")
assign(col_name,
paste(df_sample[,cat_cols[i]],'_',df_sample[,cat_cols[j]],sep=""))
df_sample <- cbind(df_sample, str_eval(col_name))
colnames(df_sample)[ncol(df_sample)] <- paste(col_name)
rm(col_name)
}
}
}