首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并R中不同大小和条件的数据帧

合并R中不同大小和条件的数据帧
EN

Stack Overflow用户
提问于 2020-05-10 03:47:40
回答 2查看 63关注 0票数 2

我正在尝试将2个csv文件合并到一个文件中。它们具有不同大小的共同id。我使用merge(),但我得到了复制的数据。我有以下数据帧;

代码语言:javascript
运行
复制
SR <- c("SR1", "SR2", "SR2", "SR2", "SR3", "SR4", "SR4")
school <- c("S-1", "S-1", "S-2", "S-4", "S-2", "S-1", "S-5")
Y <- c(3,4,1,2,5,2,3)
data1 <- data.frame(SR.id, school, Y)


SR <- c("SR1", "SR1", "SR1", "SR2", "SR2", "SR2", "SR2", "SR2", "SR2", "SR2", "SR3", "SR3", "SR4", "SR4", "SR4")
class <- c("S-1.02", "S-1.05", "S-1.07", "S-1.01", "S-1.02", "S-1.03", "S-1.06", "S-2.03", "S-2.15", "S-4.02", "S-2.01", "S-2.03", "S-1.05", "S-1.06", "S-5.01")
data2 <- data.frame(SR, class)
代码语言:javascript
运行
复制
data1
  SR     school     Y
  SR1     S-1       3
  SR2     S-1       4
  SR2     S-2       1
  SR2     S-4       2
  SR3     S-2       5
  SR4     S-1       2
  SR4     S-5       3

data2
  SR      class
  SR1     S-1.02 
  SR1     S-1.05
  SR1     S-1.07
  SR2     S-1.01
  SR2     S-1.02
  SR2     S-1.03
  SR2     S-1.06
  SR2     S-2.03
  SR2     S-2.15
  SR2     S-4.02
  SR3     S-2.01
  SR3     S-2.03
  SR4     S-1.05
  SR4     C-1.06
  SR4     C-5.01

学校是结果的地方应该是

代码语言:javascript
运行
复制
  SR      school     class      Y
  SR1      S-1       S-1.02     3
  SR1      S-1       S-1.05     3
  SR1      S-1       S-1.07     3
  SR2      S-1       S-1.01     4
  SR2      S-1       S-1.02     4
  SR2      S-1       S-1.03     4
  SR2      S-1       S-1.06     4
  SR2      S-2       S-2.03     1
  SR2      S-2       S-2.15     1
  SR2      S-4       S-4.02     2
  SR3      S-2       S-2.01     5
  SR3      S-2       S-2.03     5
  SR4      S-1       S-1.05     2
  SR4      S-1       S-1.06     2
  SR4      S-5       S-5.01     3

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-10 05:05:59

一个选项是来自fuzzyjoinregex_left_join

代码语言:javascript
运行
复制
library(fuzzyjoin)
library(dplyr)
regex_left_join(data2, data1, by = c("SR", "class" = "school")) %>%
      select(SR = SR.x, school, class, Y)

#    SR    school   class    Y
# 1  SR1    S-1     S-1.2    3
# 2  SR1    S-1     S-1.5    3
# 3  SR1    S-1     S-1.7    3
# 4  SR2    S-1     S-1.1    4
# 5  SR2    S-1     S-1.2    4
# 6  SR2    S-1     S-1.3    4
# 7  SR2    S-1     S-1.6    4
# 8  SR2    S-2     S-2.3    1
# 9  SR2    S-2     S-2.9    1
# 10 SR2    S-4     S-4.2    2
# 11 SR3    S-2     S-2.1    5
# 12 SR3    S-2     S-2.3    5
# 13 SR4    S-1     S-1.5    2
# 14 SR4    S-1     S-1.6    2
# 15 SR4    S-5     S-5.1    3
票数 1
EN

Stack Overflow用户

发布于 2020-05-10 04:20:34

您是否可以编辑您的问题,并使用dput将您的两个df放到一个我们更容易获取的形式中?

话虽如此,您需要做如下操作

代码语言:javascript
运行
复制
# NOT RUN
library(tidyverse)
RESULT <- data2 %>%
  mutate(comparison.id = str_detect(outcome.id, "^.+\\d+")) %>%
  inner_join(data1, by = c("SR.id", "comparison.id"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61702762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档