Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-通过两列合并数据帧,并添加“0”;“价值之间”;条件_R_Dataframe_Merge - Fatal编程技术网

R-通过两列合并数据帧,并添加“0”;“价值之间”;条件

R-通过两列合并数据帧,并添加“0”;“价值之间”;条件,r,dataframe,merge,R,Dataframe,Merge,我有两个数据帧,如下所示: 数据帧A: code1 code2 element1 from to c1a c2a e1a 1 15 c1a c2a e1b 17 50 c1a c2b e1c 14 67 c1b c2c e1d 1 20 c1b c2d e1e 40 60 数据帧B: code1 code2 element2 number c1a c2a

我有两个数据帧,如下所示:

数据帧A:

code1 code2 element1 from to
c1a    c2a     e1a     1    15
c1a    c2a     e1b     17   50
c1a    c2b     e1c     14   67
c1b    c2c     e1d     1    20
c1b    c2d     e1e    40   60
数据帧B:

code1 code2 element2 number
c1a    c2a     e2a    7
c1a    c2a     e2b    10
c1a    c2a     e2c    35

如果
from=过滤
范围内的值,我基本上需要连接它们

您可以在
dplyr

library(dplyr)
left_join(B, A, by = c('code1', 'code2')) %>% 
    filter(number >= from & number <= to)

#  code1 code2 element2 number element1 from to
#1   c1a   c2a      e2a      7      e1a    1 15
#2   c1a   c2a      e2b     10      e1a    1 15
#3   c1a   c2a      e2c     35      e1b   17 50
库(dplyr)
左联合(B,A,by=c('code1','code2'))%>%

filter(number>=from&number=from&number您可以加入数据,然后
筛选范围内的值

您可以在
dplyr

library(dplyr)
left_join(B, A, by = c('code1', 'code2')) %>% 
    filter(number >= from & number <= to)

#  code1 code2 element2 number element1 from to
#1   c1a   c2a      e2a      7      e1a    1 15
#2   c1a   c2a      e2b     10      e1a    1 15
#3   c1a   c2a      e2c     35      e1b   17 50
库(dplyr)
左联合(B,A,by=c('code1','code2'))%>%

过滤器(数字>=from&number=from&number这里有一个使用
fuzzyjoin::fuzzy\u-inner\u-join

我从您的输出中了解到,除了
from=fuzzyjoin::fuzzy\u internal\u join
的标准。
我从您的输出中了解到,除了
from=merge的输出(A,B,by=c('code1','code2'))
它提供了所有包含所有值的行
过滤器
需要将不在
之间的行从
删除到
。这没有意义,我不需要子集。我需要全部内容。否则,我需要对code1和Code2的每种组合运行一个过滤器如果你检查答案,我已经是jo通过
c('code1','code2')进行内联
因此,您不必对每个组合都运行筛选器。我不确定您对什么感到困惑。它适用于您共享的示例,如果您有更复杂的情况,请相应地更新您的帖子,上面的答案失败。好的,我终于可以尝试了,但子集不起作用。它不过滤任何内容=SWhy过滤器?如果我只是这样合并,它不一定对齐元素1和元素2。它只是复制行。检查
merge的输出(A,B,by=c('code1','code2'))
它提供了所有包含所有值的行
过滤器
需要将不在
之间的行从
删除到
。这没有意义,我不需要子集。我需要全部内容。否则,我需要对code1和Code2的每种组合运行一个过滤器如果你检查答案,我已经是jo通过
c('code1','code2')进行内联
因此,您不必对每个组合都运行筛选器。我不确定您对什么感到困惑。它适用于您共享的示例,如果您有更复杂的情况,请相应地更新您的帖子,上面的答案失败。好的,我终于可以尝试了,但子集不起作用。它不过滤任何东西=SI get
mf中的错误(rep(u_x,n_y),rep(u_y,each=n_x),…):在我尝试运行此操作时找不到函数“mf”
。您是否安装了
fuzzyjoin
?我在mf中得到
错误(rep(u_x,n_y),rep(u_y,each=n_x),…):在我尝试运行此操作时找不到函数“mf”
。是否安装了
fuzzyjoin
subset(merge(B, A, by = c('code1', 'code2')), number >= from & number <= to)
library(fuzzyjoin)
fuzzy_inner_join(
      df_A, df_B,
      by = c(
        "code1" = "code1",
        "code2" = "code2",
        "from" = "number",
        "to" = "number"),
      match_fun = c(
        "code1" = function(l, r) l == r,
        "code2" = function(l, r) l == r,
        "from" = function(l, r) l <= r,
        "to" = function(l, r) r <= l))

# code1.x code2.x element1 from to code1.y code2.y element2 number
# 1     c1a     c2a      e1a    1 15     c1a     c2a      e2a      7
# 2     c1a     c2a      e1a    1 15     c1a     c2a      e2b     10
# 3     c1a     c2a      e1b   17 50     c1a     c2a      e2c     35
df_A <- structure(list(code1 = c("c1a", "c1a", "c1a", "c1b", "c1b"), 
    code2 = c("c2a", "c2a", "c2b", "c2c", "c2d"), element1 = c("e1a", 
    "e1b", "e1c", "e1d", "e1e"), from = c(1L, 17L, 14L, 1L, 40L
    ), to = c(15L, 50L, 67L, 20L, 60L)), class = "data.frame", row.names = c(NA, -5L))

df_B <- structure(list(code1 = c("c1a", "c1a", "c1a"), code2 = c("c2a", 
"c2a", "c2a"), element2 = c("e2a", "e2b", "e2c"), number = c(7L, 
10L, 35L)), class = "data.frame", row.names = c(NA, -3L))