У меня есть следующие data.frames (код ниже)
Fruit Apple
1 countries Germany,Austria,Netherlands, USA
2 varieties A,B,C
и
Fruit Banana
1 countries Poland,Germany,France,Netherlands, UK
2 varieties N,C,A
Я хочу объединить их в:
Col1 Col2 Banana Apple
1 countries Poland 1 0
2 countries Germany 1 1
3 countries France 1 0
4 countries Netherlands 1 1
5 countries UK 1 0
6 countries Austria 0 1
7 countries USA 0 1
8 varieties A 1 1
9 varieties B 0 1
10 varieties C 1 1
11 varieties N 1 0
Здесьэто код для двух фреймов данных и ожидаемых результатов:
c<-structure(list(Fruit = c("countries", "varieties"), Apple = c("Germany,Austria,Netherlands, USA",
"A,B,C")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame"))
d<-structure(list(Fruit = c("countries", "varieties"), Banana = c("Poland,Germany,France,Netherlands, UK",
"N,C,A")), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame"))
Result<-structure(list(Col1 = c("countries", "countries", "countries",
"countries", "countries", "countries", "countries", "varieties",
"varieties", "varieties", "varieties"), Col2 = c("Poland", "Germany",
"France", "Netherlands", "UK", "Austria", "USA", "A", "B", "C",
"N"), Banana = c(1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1), Apple = c(0,
1, 0, 1, 0, 1, 1, 1, 1, 1, 0)), row.names = c(NA, -11L), class = c("tbl_df",
"tbl", "data.frame"))
Редактировать: я смог объединить два фрейма данных так, как я хотел.Код немного небрежный, но он работает.
c<-separate_rows(c, Apple , convert = TRUE)
c<- c%>% mutate(P_Apple=1)
d<-separate_rows(d, Banana , convert = TRUE)
d<- d%>% mutate(P_Banana=1)
Result<-full_join (c,d, by=c("Apple"="Banana"))
Result<-Result%>% mutate(Fruit=case_when(
is.na(Fruit.x)~Fruit.y,
!is.na(Fruit.x)~Fruit.x )) %>% select(c("Fruit","Apple","P_Apple","P_Banana")) %>%rename(Features="Fruit",Fruit="Apple")
Result[is.na(Result)]<-0