有人能解释一下';意外'='';当我使用相对引用时,R中的semi_join函数中的消息?
我正在尝试在R中构建一个脚本,它将根据用户输入在不同的字段上进行连接。我正在通过tidyverse(1.2.1)运行dplyr的0.7.6版 我可以构建多个基本相同的join语句,并根据输入引用不同的语句,但这似乎不雅观。下面是一个例子,下面是评论。我对R还是有点陌生,所以如果这本身不雅观,我道歉:有人能解释一下';意外'='';当我使用相对引用时,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
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)
dfsetNames
会更好一点,我认为这只是一个方便的包装,包装了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)