我有3个数据像这个
D1
Name Item January Type
E001 Phone 45.6 T
S253 Car 765.7 -
Q78 Wood 65.1 T
D2
Name Item March May Type
E001 Phone 5.6 23 F
S253 Car 65.7 78 F
Q78 Wood 5.1 965 -
D3-
Name Item Type
E001 Phone A
S253 Car A
Q78 Wood A
并且需要像这个一样的输出
Name Item January March May Type
E001 Phone 45.6 5.6 23 T/F/A
S253 Car 765.7 65.7 78 -/F/A
Q78 Wood 65.1 5.1 965 T/-/A
为此,我尝试了这个命令
merge(D1,D2,D3, by = c("Name","Item"))#%>% tidyr::unite(type, dplyr::starts_with("Type"), sep = "/", na.rm = TRUE)
但这并没有达到的目的
这将起作用:
library(dplyr)
library(tidyr)
D1 <-
data.frame(
Name = c("E001", "S253"),
Item = c("Phone", "Car"),
January = c(45.6, 765),
Type = c("T", "-")
)
D2 <-
data.frame(
Name = c("E001", "S253"),
Item = c("Phone", "Car"),
March = c(424, 465),
May = c(49, 76),
Type = c("F", "F")
)
D3 <-
data.frame(
Name = c("E001", "S253"),
Item = c("Phone", "Car"),
Type = c("A", "A")
)
D1 %>%
left_join(D2, by = c("Name", "Item")) %>%
left_join(D3, by = c("Name", "Item")) %>%
unite("Type", starts_with("Type"), sep = "/")