Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
dplyr通过排除方式加入?_R_Dplyr_Tidyverse_Tidyr - Fatal编程技术网

dplyr通过排除方式加入?

dplyr通过排除方式加入?,r,dplyr,tidyverse,tidyr,R,Dplyr,Tidyverse,Tidyr,使用dplyr中的各种join函数时,您可以使用相同名称(默认情况下)连接所有变量,也可以使用by=c(“a”=“b”)指定这些变量。有没有办法通过排除加入?例如,我在两个数据帧中有1000个变量,我想通过999个变量将它们连接起来,而不包括一个。我不想做by=c(“a1”=“b1”,…,“a999”=“b999”)。有没有办法通过排除一个未使用的变量来连接 好的,使用一个答案中的示例: set.seed(24) df1 <- data_frame(alala= LETTERS[1:3],

使用
dplyr
中的各种
join
函数时,您可以使用相同名称(默认情况下)连接所有变量,也可以使用
by=c(“a”=“b”)
指定这些变量。有没有办法通过排除加入?例如,我在两个数据帧中有1000个变量,我想通过999个变量将它们连接起来,而不包括一个。我不想做
by=c(“a1”=“b1”,…,“a999”=“b999”)
。有没有办法通过排除一个未使用的变量来连接

好的,使用一个答案中的示例:

set.seed(24)
df1 <- data_frame(alala= LETTERS[1:3], skks= letters[1:3], sskjs= 
                  letters[1:3], val = rnorm(3))
df2 <- data_frame(alala= LETTERS[1:3], skks= letters[1:3], sskjs= 
                   letters[1:3], val = rnorm(3))
set.seed(24)

df1我们创建一个命名的向量来实现这一点

library(dplyr)
grps <- setNames(paste0("b", 1:999), paste0("a", 1:999))
使用可复制的示例

set.seed(24)
df1 <- data_frame(a1 = LETTERS[1:3], a2 = letters[1:3], val = rnorm(3))
df2 <- data_frame(b1 = LETTERS[3:4], b2 = letters[3:4], valn = rnorm(2))
grps <- setNames(paste0("b", 1:2), paste0("a", 1:2))

inner_join(df1, df2, by = grps)
# A tibble: 1 x 4
#  a1    a2      val   valn
#  <chr> <chr> <dbl>  <dbl>
#1 C     c     0.420 -0.584
set.seed(24)

df1我们创建一个命名的向量来实现这一点

library(dplyr)
grps <- setNames(paste0("b", 1:999), paste0("a", 1:999))
使用可复制的示例

set.seed(24)
df1 <- data_frame(a1 = LETTERS[1:3], a2 = letters[1:3], val = rnorm(3))
df2 <- data_frame(b1 = LETTERS[3:4], b2 = letters[3:4], valn = rnorm(2))
grps <- setNames(paste0("b", 1:2), paste0("a", 1:2))

inner_join(df1, df2, by = grps)
# A tibble: 1 x 4
#  a1    a2      val   valn
#  <chr> <chr> <dbl>  <dbl>
#1 C     c     0.420 -0.584
set.seed(24)
df1要排除某个字段,需要标识所需列的索引。这里有一个方法:

which(!names(df1) %in% "sskjs" ) #<this excludes the column "sskjs"
[1] 1 2 4                        #<and shows only the desired index columns
要排除某个字段,需要标识所需列的索引。这里有一个方法:

which(!names(df1) %in% "sskjs" ) #<this excludes the column "sskjs"
[1] 1 2 4                        #<and shows only the desired index columns


尽管你的问题似乎很清楚,但请分享一个模仿你的问题的最小可复制示例。如果你包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,这会更容易帮助你。@JianghuiDu注意,如果你不知道要排除的列的索引,而且要匹配的列在两个数据帧中的名称都不相同,您如何知道如果没有模式与名称匹配,您将正确地对列?对不起,我的错误。这些名字应该是相同的。示例中已更正。您的示例在DF2中的长度不匹配。尽管您的问题似乎很清楚,请分享一个模拟您的问题的最小可复制示例。如果您包含一个简单的示例输入和所需的输出,可用于测试和验证可能的解决方案,则更容易帮助您。@JianghuiDu注意,如果您不知道要排除的列的索引,而且要匹配的列在两个数据帧中的名称都不相同,如果名称没有模式,您如何知道可以正确地对列进行匹配?对不起,我的错。这些名字应该是相同的。已在示例中更正。您的示例的df2OK长度不匹配。我想的问题不是这么简单。在这个示例中,变量名很简单,您可以这样做,但是变量名没有像他简单示例中那样的“规则”呢?我想我的意思是,我知道我不想加入的名字,而我想加入的人太多了,我记不清他们所有的名字。@JianghuiDu在你的帖子中,似乎有一个模式。如果你知道列的索引,
grps假设我只知道名称而不知道索引。超级聪明。我看到新的问题是:“假设有1000个变量,我只记得我想在联接中排除的那个变量的名称,而不知道该变量的索引。”好的。我想的问题不是这么简单。在这个示例中,变量名很简单,您可以这样做,但是变量名没有像他简单示例中那样的“规则”呢?我想我的意思是,我知道我不想加入的名字,而我想加入的人太多了,我记不清他们所有的名字。@JianghuiDu在你的帖子中,似乎有一个模式。如果你知道列的索引,
grps假设我只知道名称而不知道索引。超级聪明。我看到新的问题是:“假设有1000个变量,我只记得要在联接中排除的变量的名称,而不知道该变量的索引。”