Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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中的semi_join函数中的消息?_R_Dplyr - Fatal编程技术网

有人能解释一下';意外'='';当我使用相对引用时,R中的semi_join函数中的消息?

有人能解释一下';意外'='';当我使用相对引用时,R中的semi_join函数中的消息?,r,dplyr,R,Dplyr,我正在尝试在R中构建一个脚本,它将根据用户输入在不同的字段上进行连接。我正在通过tidyverse(1.2.1)运行dplyr的0.7.6版 我可以构建多个基本相同的join语句,并根据输入引用不同的语句,但这似乎不雅观。下面是一个例子,下面是评论。我对R还是有点陌生,所以如果这本身不雅观,我道歉: library(tidyverse) df <- tibble( a = letters[1:20], b = c(1:5,1:5,1:5,1:5) ) ref <- tibb

我正在尝试在R中构建一个脚本,它将根据用户输入在不同的字段上进行连接。我正在通过tidyverse(1.2.1)运行dplyr的0.7.6版

我可以构建多个基本相同的join语句,并根据输入引用不同的语句,但这似乎不雅观。下面是一个例子,下面是评论。我对R还是有点陌生,所以如果这本身不雅观,我道歉:

library(tidyverse)
df <- tibble(
  a = letters[1:20],
  b = c(1:5,1:5,1:5,1:5)
)

ref <- tibble(
  let_ref_col = c('e','g','b','d','f'),
  num_ref_col = c(2,4,NA,NA,NA)
)

df2 <- semi_join(df,ref,c('b'='num_ref_col'))

df3 <- semi_join(df,ref,c('b'=colnames(ref)[2]))
df2==df3 #just to check

df4 <- semi_join(df,ref,c(colnames(df)[2]=colnames(ref)[2]))

可以将其更改为1,以通过字母而不是数字连接

这里有一个解决方法。我们可以使用
名称这里有一个解决方法。我们可以使用
names你在一行上做了很多事情,最后一行是
semi_-join(df,ref,c(colnames(df)[2]=colnames(ref)[2])
。特别是在这一位:
colnames(df)[2]=colnames(ref)[2]
有许多操作可能与R的操作相冲突。下面是我如何编程的:

library(tidyverse)

df <- tibble(
  a = letters[1:20],
  b = c(1:5,1:5,1:5,1:5)
)

ref <- tibble(
  let_ref_col = c('e','g','b','d','f'),
  num_ref_col = c(2,4,NA,NA,NA)
)

semi_join_by_column_index <- function(df1, df2, idx) {
  original_name <- names(df1)[idx]

  names(df1)[idx] <- "join_column"
  names(df2)[idx] <- "join_column"

  new_df <- semi_join(df1, df2, by = "join_column")

  new_idx <- match("join_column", names(new_df))
  names(new_df)[new_idx] <- original_name

  return(new_df)
}

merged_df <- semi_join_by_column_index(df, ref, idx = 2)
库(tidyverse)

df您在最后一行中做了很多事情
semi_join(df,ref,c(colnames(df)[2]=colnames(ref)[2])
。特别是在这一位:
colnames(df)[2]=colnames(ref)[2]
有许多操作可能与R的操作相冲突。下面是我如何编程的:

library(tidyverse)

df <- tibble(
  a = letters[1:20],
  b = c(1:5,1:5,1:5,1:5)
)

ref <- tibble(
  let_ref_col = c('e','g','b','d','f'),
  num_ref_col = c(2,4,NA,NA,NA)
)

semi_join_by_column_index <- function(df1, df2, idx) {
  original_name <- names(df1)[idx]

  names(df1)[idx] <- "join_column"
  names(df2)[idx] <- "join_column"

  new_df <- semi_join(df1, df2, by = "join_column")

  new_idx <- match("join_column", names(new_df))
  names(new_df)[new_idx] <- original_name

  return(new_df)
}

merged_df <- semi_join_by_column_index(df, ref, idx = 2)
库(tidyverse)

df
setNames
会更好一点,我认为这只是一个方便的包装,包装了
names(object)@thelatemail的好建议。谢谢。
setNames
会更好一点,我想这只是一个方便的包装,包装了
names(object)@thelatemail的好建议。谢谢
library(tidyverse)

df <- tibble(
  a = letters[1:20],
  b = c(1:5,1:5,1:5,1:5)
)

ref <- tibble(
  let_ref_col = c('e','g','b','d','f'),
  num_ref_col = c(2,4,NA,NA,NA)
)

semi_join_by_column_index <- function(df1, df2, idx) {
  original_name <- names(df1)[idx]

  names(df1)[idx] <- "join_column"
  names(df2)[idx] <- "join_column"

  new_df <- semi_join(df1, df2, by = "join_column")

  new_idx <- match("join_column", names(new_df))
  names(new_df)[new_idx] <- original_name

  return(new_df)
}

merged_df <- semi_join_by_column_index(df, ref, idx = 2)