Here is the dplyr way. Make sure that you provide column names as given in t1
and t2
library(tidyverse)
t1 <- tibble(X1 = c("a;b","c","d;e"))
t2 <- tibble(Y1 =letters[1:5] , Y2 = c("uuu","vvv","xxx","yyy","zzz") ,Y3 =c("uu","vv","xx","yy","zz"))
t3 <- t1 %>%
mutate(mm = map(X1, ~(strsplit(.,split = ";"))[[1]] %>% as_tibble)) %>%
mutate(nn = map(mm , function(.){
col_binds <- left_join(.,t2, by = c("value" = "Y1")) %>%
unite(col = "comb",sep = "|" , Y2:Y3)
row_binds <- col_binds %>%
summarise(value = paste0(value , collapse = ";") , times = paste0(comb , collapse = "<\br>"))
return(row_binds)
})) %>%
select(nn) %>%
unnest() %>%
dplyr::rename(X1 = value , Y2 = times)
## output
t3
# A tibble: 3 x 2
X1 Y2
<chr> <chr>
1 a;b "uuu|uu<\br>vvv|vv"
2 c xxx|xx
3 d;e "yyy|yy<\br>zzz|zz"
Very thanks Chirag, i am receiving an error :
Error in mutate_impl(.data, dots) : Evaluation error: NA/NaN argument.
I am receiving another error:
What is the datatype of column Y1 in t2 ? In the sample data you provided, Y1 is character. Error suggest that your Y1 is integer. can you upload full data, if possible ? Without data its hard to predict.
I changed datatype of Y1 integer to character. I am now giving error
Data X1 Data Y
Without any error, it is working perfectly fine in my computer
I notice many duplicated rows. adding
t3 %>% unique()
will give you unique rowsI is worked at me, too. It is wonderfull. Thank you very very much!..
Could I add per X1 to Y2? Output like that:
I found a way. It is working. Thanks for all.
I have a same problem like that? Can you help me please? Merge two comma seperated column in one frame in R