我有两个看起来像这样的数据帧
数据帧1:
P.X value
OOPA 5
POKA 4
JKIO 3
KOPP 1
数据框2:
P.X.1 P.X.2 P.X.3 P.X.4 mass
JKIO UIX HOP 56
CX OOPA 44
EDD POKA 13
KOPP FOSI 11
,我想基于df1 P.X和df2 P.X.1,P.X.2,P.X.3,P.X.4合并两个数据文件。因此,如果是P.X.2中的JKIO。出现在P.X中,然后将它们合并到同一行JKIO,3、56的新数据框中,如下所示:
新数据框:
P.X value mass
OOPA 5 44
POKA 4 13
JKIO 3 56
KOPP 1 11
您知道我该怎么做
merge(df1,df2 by(P.X == P.X.1 | P.X.2 | P.X.3 | P.X.4)
?
答案 0 :(得分:1)
以下是实现目标的一种方法。您想将df2
转换为长格式数据并获取具有多个字符的行。获得这些数据后,将df1与更新的df2合并。
library(dplyr)
library(tidyr)
left_join(df1,
pivot_longer(df2, cols = P.X.1:P.X.4, names_to = "foo",
values_to = "P.X") %>% filter(nchar(P.X) > 0),
by = "P.X") %>%
select(-foo)
P.X value mass
1 OOPA 5 44
2 POKA 4 13
3 JKIO 3 56
4 KOPP 1 11
数据
df1 <- structure(list(P.X = c("OOPA", "POKA", "JKIO", "KOPP"), value = c(5L,
4L, 3L, 1L)), class = "data.frame", row.names = c(NA, -4L))
df2 <- structure(list(P.X.1 = c("", "", "EDD", "KOPP"), P.X.2 = c("JKIO",
"", "", "FOSI"), P.X.3 = c("UIX", "CX", "POKA", ""), P.X.4 = c("HOP",
"OOPA", "", ""), mass = c(56, 44, 13, 11)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
答案 1 :(得分:0)
您也可以这样做:
df_new <- cbind(df1, df2[,5])