合并两个数据框,其中一列根据条件匹配

2023-12-29

模拟数据:

set.seed(1)
df1 <- data.frame(country=c("US", "UK"),
                  year=c(2000, 2003))
df2 <- data.frame(country=rep(c("US", "UK"), 10),
                  year=rep(2000:2009, 2),
                  myvar=rnorm(20))

df1包含感兴趣的国家/地区年份。我想要得到myvar该国家年以及前后 3 年的值。

换句话说,合并是基于以下条件完成的:df2$country==df1$country AND df2$year > df1$year - 3 & df2$year < df1$year + 3

编辑:我的(工作,不优雅)解决方案是填充df1创建我感兴趣的所有国家/地区年份,然后与df2常规方式。

library(plyr)
ddply(df1, c("country", "year"), 
  function(df) data.frame(rep(df$country, 7), (df$year-3):(df$year+3)))

produces

   country year rep.df.country..7. X.df.year...3...df.year...3.
1       UK 2003                 UK                         2000
2       UK 2003                 UK                         2001
3       UK 2003                 UK                         2002
4       UK 2003                 UK                         2003
5       UK 2003                 UK                         2004
6       UK 2003                 UK                         2005
7       UK 2003                 UK                         2006
8       US 2000                 US                         1997
9       US 2000                 US                         1998
10      US 2000                 US                         1999
11      US 2000                 US                         2000
12      US 2000                 US                         2001
13      US 2000                 US                         2002
14      US 2000                 US                         2003

合并适合在哪里?这听起来像是一个子集问题,除非我误解了这个问题(正如我经常承认的那样)

set.seed(1)
df1 <- data.frame(country=c("US", "UK"),
                  year=c(2000, 2003))
df2 <- data.frame(country=rep(c("US", "UK"), 10),
                  year=rep(2000:2009, 2),
                  myvar=rnorm(20))


f <- lapply(df1$country, function(x) {
  tmp <- df2[df2$country == x, ]
  tmp[abs(tmp$year - df1[df1$country == x, 'year']) <= 3, ]
})


do.call(rbind, f)

#    country year       myvar
# 1       US 2000 -0.62645381
# 3       US 2002 -0.83562861
# 11      US 2000  1.51178117
# 13      US 2002 -0.62124058
# 2       UK 2001  0.18364332
# 4       UK 2003  1.59528080
# 6       UK 2005 -0.82046838
# 12      UK 2001  0.38984324
# 14      UK 2003 -2.21469989
# 16      UK 2005 -0.04493361

EDIT

set.seed(1)
df1 <- data.frame(country=c("US", "UK"),
                  year=c(2000, 2003, 2009, 2009))
df2 <- data.frame(country=rep(c("US", "UK"), 10),
                  year=rep(2000:2009, 2),
                  myvar=rnorm(20))

f <- lapply(seq_len(nrow(df1)), function(x) {
  y <- df1[x, 'country']
  tmp <- df2[df2$country == y, ]
  tmp[abs(tmp$year - df1[x, 'year']) <= 3, ]
})


do.call(rbind, f)

#    country year       myvar
# 1       US 2000 -0.62645381
# 3       US 2002 -0.83562861
# 11      US 2000  1.51178117
# 13      US 2002 -0.62124058
# 2       UK 2001  0.18364332
# 4       UK 2003  1.59528080
# 6       UK 2005 -0.82046838
# 12      UK 2001  0.38984324
# 14      UK 2003 -2.21469989
# 16      UK 2005 -0.04493361
# 7       US 2006  0.48742905
# 9       US 2008  0.57578135
# 17      US 2006 -0.01619026
# 19      US 2008  0.82122120
# 8       UK 2007  0.73832471
# 10      UK 2009 -0.30538839
# 18      UK 2007  0.94383621
# 20      UK 2009  0.59390132
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并两个数据框,其中一列根据条件匹配 的相关文章

  • 更新两组单选按钮 - 闪亮

    我问了这个问题 反应式更新两组单选按钮 闪亮 https stackoverflow com questions 35040579 update two sets of radiobuttons reactively shiny 昨天 但也
  • R - 通过合并和超过 2 个后缀进行减少(或者:如何合并多个数据帧并跟踪列)

    我正在尝试基于 2 列合并 4 个数据帧 但要跟踪列源自哪个数据帧 我在跟踪列时遇到问题 参见 dput dfs 帖子末尾 df example df1 Name Color Freq banana yellow 3 apple red 1
  • R中使用余弦距离的层次聚类

    我想通过使用余弦相似度与 R 编程语言对文档语料库进行层次聚类 但出现以下错误 if is na n n gt 65536L stop 大小不能为 NA 或 超过 65536 需要 TRUE FALSE 时缺少值 我应该怎么办 为了重现它
  • R:(中缀)运算符的两个定义之间的冲突:如何指定包?

    在 R 中 每当两个包定义相同的函数时 很容易指定要使用哪个包pkg foo 但是 当冲突的功能是一个时 你该怎么办 infix运算符 即使用定义 举个例子 两者ggplot2 and crayon define 有没有一种方法可以让我默认
  • 行方向变异的有效方法

    我有两个数据框 dfUsers and purchases使用以下代码生成 set seed 1 library data table dfUsers lt data table user letters 1 5 startDate sam
  • 按组复制数据框

    我有以下数据框 df structure list Group c 1 1 1 1 2 2 2 2 2 2 3 3 3 index c 1 2 3 4 1 2 3 4 5 6 1 2 3 row names c NA 13L class c
  • 如何将数据从长格式重塑为宽格式

    我在重新排列以下数据框时遇到问题 set seed 45 dat1 lt data frame name rep c firstName secondName each 4 numbers rep 1 4 2 value rnorm 8 d
  • R 获取子字符串和正则表达式?

    我有一组文件名字符串 我想提取 符号之后但文件扩展名之前的所有字符 例如 文件名之一是 HelloWorld you txt 我想返回字符串you 这是我的代码 hashPos grep name fixed TRUE dotPos len
  • 基本 dyplr 函数给出错误:“check_dots_used”

    试图找出为什么我会收到此错误 以前从未见过 谷歌没有帮助 check dots used action warn 中的错误 未使用参数 action warn 我在下面的非常基本的试验中收到错误 而且在 group by count 中也收
  • R 3.5 - read.csv 无法读取 UTF-16 csv 文件

    我的代码如下 read csv http asic gov au Reports YTD 2018 RR20180420 001 SSDailyYTD csv skip 1 fileEncoding UTF 16 sep t header
  • 如何对范围内的行进行分组并考虑第三列?

    我有一个遗传数据集 我想对基因组中物理上靠近的遗传变异 行进行分组 我想对每条染色体基因组中某些点范围内的基因进行分组 chrom 我的 点 数据集包含变体 行需要在一定范围内的位置 如下所示 chrom low high 1 500 17
  • R ggplot2 分面保持比率但覆盖/定义输出图大小

    我目前正在使用 ggplot2 来比较不同组的统计数据 每个组属于不同的区域 这是通过运行 R 脚本的 Web 应用程序 tikiwiki CMS 插件 R 完成的 每个区域我可以有 2 到 30 个或更多组 相同的 R 脚本针对唯一网页中
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • ggplot2 中的中心图标题

    这个简单的代码 以及今天早上我的所有脚本 已经开始在 ggplot2 中给我一个偏离中心的标题 Ubuntu version 16 04 R studio version Version 0 99 896 R version 3 3 2 G
  • 按名称包含在单个对象中的多个列对 data.frame 进行排序?

    我想排序一个data frame由多列组成 理想情况下使用基础 R 无需任何外部包 尽管如果有必要 就这样吧 读过如何按列对数据框进行排序 https stackoverflow com questions 1296646 how to s
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • ggplot:类似于scale_color_steps()的有序因子的色标

    With scale color steps 我们可以通过设置low和high争论 一个例子 df lt data frame x rnorm 99 y rnorm 99 col rnorm 99 ggplot df aes x y col
  • 在 R 中读入原始二进制数据并将其转换为整数

    我有一个二进制文件 其中包含编码为不同长度 主要是 2 4 字节 的有符号或无符号整数的数值 为了处理这些数据 我将文件的所需部分读取为raw向量与readBin 然后尝试将其转换为十进制 问题是 R的内置函数有限制 我不太明白 比如没有l
  • 解压 R 数据框中的列表

    我有一个dataframe其中一个字段包含不同长度的列表 我想将该字段中列表的每个元素提取到其自己的字段中 以便我可以将结果收集到一个很长的字段中dataframe每个列表元素都有一个 id 这是一个例子dataframe dat lt s

随机推荐

  • 是否可以修改 Text swt 小部件换行的方式?

    开发平台是Fedora上的Eclipse RCP 3 4 它使用Gtk本机组件 我需要避免自动换行 即 Hello World 显示为案例 N 1 但我需要案例 N 2 1 Hello 2 Hello Wor World ld 有简单的解决
  • 凤凰卫视 - 从控制器广播 - 如何找到 current_user?

    我有一个应用程序 可以在submission controller 中广播一些表单提交 如下所示 Formerer Endpoint broadcast forms form id new submission payload 但是 我现在
  • 如何可视化大图?

    我正在尝试创建一个节点数量超过 400 个的图表 但未以正确的方式进行可视化 import networkx as nx G nx MultiGraph G add nodes from freqItemSet G add edges fr
  • 使用curl发送cookie

    我正在使用curl 来检索cookie 如下所示 curl c cookies txt url 然后我从 cookies txt 文件中解析我想要的 cookie 并使用 cookie 再次发送请求 curl b name value ur
  • 求解二次方程但出现奇怪的错误

    我正在尝试用 Fortran 语言编写第一个程序 尝试求解二次方程 我对我的代码进行了两次和三次检查 没有发现任何问题 我不断在不同位置收到 1 处名称中的无效字符 和 1 处无法分类的语句 代码有什么问题吗 This program so
  • 向 t-SNE 模型添加新点

    我尝试在 scikit learn 中使用 t SNE 算法 import numpy as np from sklearn manifold import TSNE X np array 0 0 0 0 1 1 1 0 1 1 1 1 m
  • 错误 itms-90035 - Xcode

    我开发了一个phonegap应用程序 它在iPhone上运行得非常好 现在 我想将应用程序提交到应用程序商店 以下是我提交应用程序时遵循的程序 打开 Xcode 并存档项目 点击验证 即成功 单击 提交到应用程序商店 这是我收到以下错误的地
  • svn merge --dry-run 显示 svn diff

    我正在使用一个代码库 历史上 是手动合并的 而不是通过svn merge 我试图通过向每个人证明合并是多么有用来改变这一点 但当我进行空运行时 我得到了这个 svn merge Repo URL c 21355 21358 21364 21
  • 如何提高 Google 语音识别对分隔数字的准确性

    我们将此图像提供给我们的用户 在此输入图像描述 https i stack imgur com 2jkBp jpg 这张图片代表单独的数字 我们所有的用户都会在麦克风中将其读为 11 0 9 5 我们使用 Google Speech Eng
  • ASP.NET Core 3.0 [FromBody] 字符串内容返回“JSON 值无法转换为 System.String”。

    Using FromBody 上的字符串内容ApiController在 ASP NET Core 3 0 中返回验证错误 type https tools ietf org html rfc7231 section 6 5 1 title
  • 如何在一行中将输入流重定向到输出流?

    我想做这个 cout lt lt cin 而不是这个 int x cin gt gt x cout lt
  • 整个计算机的文件观察器(替代方案?)

    我想编写一个应用程序来获取整个计算机上每个文件更改的事件 以在文件位置 权限和我的应用程序的数据库之间进行同步 我正在考虑使用 net filewatcher 类 但经过一些测试后我发现了以下限制 1 文件观察器有一个缓冲区 http ms
  • C 中的 String.indexOf 函数

    是否有 C 库函数可以返回字符串中字符的索引 到目前为止 我发现的只是像 strstr 这样的函数 它将返回找到的 char 而不是它在原始字符串中的位置 strstr返回指向找到的字符的指针 因此您可以使用指针算术 注意 此代码未测试其编
  • 找不到使用 sqlplus 控制台创建的目录

    我使用 SQLPlus 控制台创建了一个目录 但在文件系统上找不到它 这是我使用的命令 SQL gt create directory secfile as opt oracle Directory created 我查看了我的 Oracl
  • ModuleNotFoundError:没有名为“django.utils.six”的模块[重复]

    这个问题在这里已经有答案了 HTTP GET admin 500 0 00 127 0 0 1 51425 回溯 最近一次调用最后一次 文件 C Program Files x86 Microsoft Visual Studio Share
  • 在 UnhandledException 上显示消息对话框

    在我的应用程序中 我想在出现任何未处理的异常时显示消息对话框 但当抛出未处理的异常时 似乎没有出现对话框消息 显示消息弹出窗口是否有效 另外在 MSDN 文档中我没有找到太多相关信息 以下是我正在使用的测试代码 public App thi
  • 如何判断元素是否具有流体宽度[重复]

    这个问题在这里已经有答案了 可能的重复 使用 JavaScript 确定元素是否具有固定宽度或百分比宽度 https stackoverflow com questions 1782566 determine whether element
  • “InMemoryUploadedFile”对象没有属性“encode”

    我正在尝试在 Django 中发送一封带有附件的电子邮件 文件是request FILE file 对象 InMemoryUploadedFile 类型 我通过创建消息EmailMessage 然后附加文件message attach f
  • R 中的数据框和列表有什么区别?

    有什么区别数据框 and list in R 什么时候应该使用哪一个 哪个更容易循环 确切的问题 我必须首先存储 3 个字符串元素 如 a b c 稍后 对于其中的每一个 我都需要附加 3 个元素 例如 对于 a 我必须添加 a1 a2 a
  • 合并两个数据框,其中一列根据条件匹配

    模拟数据 set seed 1 df1 lt data frame country c US UK year c 2000 2003 df2 lt data frame country rep c US UK 10 year rep 200