r - 基于R中的多列合并两个数据框
问题描述
我有两个看起来像这样的数据框
数据框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 PX 和 df2 PX1,PX2,PX3,PX4 的两个数据文件。因此,如果它是 PX2 中的 JKIO。出现在 PX 中,然后将它们合并到同一行 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)
?
解决方案
以下是实现目标的一种方法。您想要转换df2
为长格式数据并获取超过 1 个字符的行。获得此数据后,将 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"))
推荐阅读
- excel - VBA For Each 粘贴在 For Each 的第一个循环中返回公式,然后返回值
- flutter - 在网格视图和顶栏之间添加空间
- node.js - Discord.js 命令处理对我不起作用
- c - 在 C 中使用 GMP 库测试素数
- swift - MessageKit 中的自定义单元格
- javascript - 您可以在 Firestore 的地图数组中创建或更新项目吗?
- pdf - 从 NetSuite 的“常规首选项”选项卡访问客户参数
- azure-functions - 使用 host.json 文件在本地禁用一些 azure 功能
- python - 在 Pandas 中查找一系列分类数据的任意长度的重复区间
- python - 从 python 添加时,hint_text 保持空白