获取R中两个数据帧之间的下一条记录 r 获取R中两个数据帧之间的下一条记录,r,R,我有两个数据帧: DataFrame 1: ID 3000 4000 5000 6000 DataFrame2: ID Value 3000 1 3010 2 3020 3 4010 4 5000 5 6000 6 7000 7 我需要连接ID上的两个帧,其中Dataframe1.ID 我有两个数据帧: DataFrame 1: ID 3000 4000 5000 6000 DataFrame2: ID Value 3000 1 3010 2 3020 3 4010 4 5000 5 6000 6 7000 7 我需要连接ID上的两个帧,其中Dataframe1.ID 结果将是 Dataframe1 Dataframe2.ID value 3000 4010 4 4000 5000 5 5000 6000 6 6000 7000 7 我在sql server中的做法是将ID连接起来,其中的ID除以1000并四舍五入到最接近的数字,然后我从dataframe2中得到了前1个最大的数字。我不知道在R.怎么做 其中dataframe1.ID/1000 代码 资料 我假设Jonny Phelp关于价值的评论是正确的。否则,这在第二行代码中很容易修复。此外,肯定存在一种更优雅的方法,可以简单地从第一条lappy语句中检索ind以产生值 编辑:以下过程可能更优雅: 使用data.table 代码 资料 我假设Jonny Phelp关于价值的评论是正确的。否则,这在第二行代码中很容易修复。此外,肯定存在一种更优雅的方法,可以简单地从第一条lappy语句中检索ind以产生值 编辑:以下过程可能更优雅: 输出中的值应改为4,5,6,7吗?4010 ID在DF2中的值为4是的,很抱歉..输出中的值应该是4,5,6,7吗?4010 ID在DF2中的值为4是的,对此表示抱歉..感谢您的回复!!我还在努力学习R,你们能解释一下功能部分在做什么吗?当然,只要时间允许,我会做的!如何获取整个数据集?我尝试了这个最后的结果让我解释一下我的最下面的例子是什么,因为我认为它是最容易理解的。代码在df2中查找与每个ID_df1对应的值。例如:对于ID_df1==3000,适当的ID_df2等于4010,对应的值为4。因此,对于ID_df1==3000,值=4。一旦在df1中有了适当的值,我们就可以简单地根据值合并两个表。关于您的问题,您是否将数据帧转换为数据表?谢谢您的回复!!我还在努力学习R,你们能解释一下功能部分在做什么吗?当然,只要时间允许,我会做的!如何获取整个数据集?我尝试了这个最后的结果让我解释一下我的最下面的例子是什么,因为我认为它是最容易理解的。代码在df2中查找与每个ID_df1对应的值。例如:对于ID_df1==3000,适当的ID_df2等于4010,对应的值为4。因此,对于ID_df1==3000,值=4。一旦在df1中有了适当的值,我们就可以简单地根据值合并两个表。关于您的问题,您是否将数据帧转换为data.tables? df1[, DF2ID := lapply(ID, function(x){ ind = nrow(df2) + 1 - sum(x + 1000 <= df2[, ID]) return(df2[ind, ID]) })] df1[, value := sapply(DF2ID, function(x){ df2[which(ID == x), Value] })] > df1 ID DF2ID value 1: 3000 4010 4 2: 4000 5000 5 3: 5000 6000 6 4: 6000 7000 7 df1 = data.table(ID = seq(3000, 6000, 1000)) df2 = data.table(ID = c(3000, 3010, 3020, 4010, 5000, 6000, 7000), Value = seq(1:7)) df1 = data.table(ID_df1 = seq(3000, 6000, 1000)) df2 = data.table(ID_df2 = c(3000, 3010, 3020, 4010, 5000, 6000, 7000), Value = seq(1:7)) df1[, Value := sapply(ID_df1, function(x){ nrow(df2) + 1 - sum(x + 1000 <= df2[, ID_df2]) })] df_master = merge(df1, df2, by = 'Value') > df_master Value ID_df1 ID_df2 1: 4 3000 4010 2: 5 4000 5000 3: 6 5000 6000 4: 7 6000 7000