Не совсем понятно, как выглядят ваши начальные данные или конечный результат (см. Комментарий выше). Тем не менее, это может быть полезным для продвижения вперед.
Похоже, вы уже разбили столбцы через запятую. Вы можете объединить столбцы из «Dis» и «Area», создав фрейм данных с именами столбцов, которые необходимо объединить.
Затем можно использовать expand.grid
для создания комбинации столбцов «Dis» и столбцов «Area». При желании это также можно обобщить, используя сами имена столбцов (начиная с «Dis» или «Area»).
Оператор sapply
будет go через эту комбинацию пар имен столбцов и объединять соответствующие строки вместе.
Редактировать: Для каждой строки добавляется уникальная ссылка id
.
library(tidyr)
df <- data.frame(
id = c(1,2,3),
Dis = c("NAGAR,SANGANER", "NAGAR", "JHUNJHUNUN,BARI"),
Area = c("NAGAR,PRATAP NAGAR,SANGANER", "NAGAR,SODALA,BHANDARI", "BARI"),
stringsAsFactors = F
)
df2 <- df %>%
separate(Dis, into = paste0('Dis', 1:3), sep = ',') %>%
separate(Area, into = paste0('Area', 1:3), sep = ',')
df2[is.na(df2)] <- ""
exp_cols <- expand.grid(names(df2)[2:4], names(df2)[5:7])
df_final <- cbind(df2$id, as.data.frame(sapply(1:nrow(exp_cols), function(x){
do.call(paste, c(df2[, as.character(unlist(exp_cols[x,]))], sep=" | "))
})))
names(df_final) <- c("id", paste(exp_cols[,1], exp_cols[,2], sep = "_"))
Вывод
id Dis1_Area1 Dis2_Area1 Dis3_Area1 Dis1_Area2 Dis2_Area2 Dis3_Area2 Dis1_Area3 Dis2_Area3 Dis3_Area3
1 1 NAGAR | NAGAR SANGANER | NAGAR | NAGAR NAGAR | PRATAP NAGAR SANGANER | PRATAP NAGAR | PRATAP NAGAR NAGAR | SANGANER SANGANER | SANGANER | SANGANER
2 2 NAGAR | NAGAR | NAGAR | NAGAR NAGAR | SODALA | SODALA | SODALA NAGAR | BHANDARI | BHANDARI | BHANDARI
3 3 JHUNJHUNUN | BARI BARI | BARI | BARI JHUNJHUNUN | BARI | | JHUNJHUNUN | BARI | |