Dplyr select抛出一个整数错误的解决方案,但基本select有效,为什么?

Dplyr select抛出一个整数错误的解决方案,但基本select有效,为什么?,r,select,dataframe,error-handling,dplyr,R,Select,Dataframe,Error Handling,Dplyr,我有一个大的扩展数据框: df: a1 a2 a3 a4 a5 ............... r w sd w y ........ 我有另一个输入,它是df的子集 subset_df: a3 a4 a5 f e u 我的目标是获取subset_df的列名,在df中选择这些列,然后从那里继续(在我的例子中是比较值) 当我以简单的方式进行此操作时: df[,name(subset_-df)]它可以工作,但为什么它拒绝使用dplyr select 以下

我有一个大的扩展数据框:

df: a1 a2 a3 a4 a5 ...............
    r  w  sd w  y ........
我有另一个输入,它是df的子集

subset_df: a3 a4 a5
           f  e  u 
我的目标是获取
subset_df
的列名,在
df
中选择这些列,然后从那里继续(在我的例子中是比较值)

当我以简单的方式进行此操作时:

df[,name(subset_-df)]
它可以工作,但为什么它拒绝使用
dplyr select

以下是运行时出现的错误:

names_sub_df <- names(subset_df)
df %>% select(names_sub_df)


Error: All select() inputs must resolve to integer column positions.
The following do not:
*  as.vector(names_sub_df)
names\u sub\u df%选择(names\u sub\u df)
错误:所有select()输入必须解析为整数列位置。
以下情况不适用:
*as.vector(名称_sub _df)
以下是一个可复制的示例:

key <- c("a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16", "a17", "a18")

value <- c("G", "CTT", "C", "C", "G", "C", "T", "C", "C", "C", "G", "T", "C", "G", "T", "A", "T", "G")


test2 <- data.frame(key, value, stringsAsFactors = FALSE)

key在没有最小可复制示例的情况下,使用
mtcars
作为示例

您可以在
colnames
中包装子集数据帧,因此
select
使用名称,而不是整个数据帧来进行子集设置:

mtcars
subset_mtcars = c("hp", "drat", "wt")
subset_mtcars = mtcars[, subset_mtcars]
subset_mtcars

library("tidyverse")    
mtcars %>% 
  select(colnames(subset_mtcars))

#                      hp drat    wt
# Mazda RX4           110 3.90 2.620
# Mazda RX4 Wag       110 3.90 2.875
# Datsun 710           93 3.85 2.320
# ...

mtcars
为例,在缺乏最小可重复性示例的情况下

您可以在
colnames
中包装子集数据帧,因此
select
使用名称,而不是整个数据帧来进行子集设置:

mtcars
subset_mtcars = c("hp", "drat", "wt")
subset_mtcars = mtcars[, subset_mtcars]
subset_mtcars

library("tidyverse")    
mtcars %>% 
  select(colnames(subset_mtcars))

#                      hp drat    wt
# Mazda RX4           110 3.90 2.620
# Mazda RX4 Wag       110 3.90 2.875
# Datsun 710           93 3.85 2.320
# ...

从您的示例中,我不确定您是要选择列还是要选择列中的值。如果您正在搜索后者,以下操作将完成此任务:

subset_df <- c("a3", "a4", "a5")
test2[test2$key %in% subset_df, ]

subset_df从您的示例中,我不确定您是要选择列还是要选择列中的值。如果您正在搜索后者,以下操作将完成此任务:

subset_df <- c("a3", "a4", "a5")
test2[test2$key %in% subset_df, ]


subset\u df也许,一个可复制的示例将有助于…@Christoph更新我的问题,对不起。@Christoph请告诉我发生错误的原因?我遗漏了什么?可能是重复的,一个可复制的例子可能会有帮助…@Christoph更新我的问题,对不起。@Christoph请告诉我错误发生的原因?我遗漏了什么?可能是重复的谢谢你的回答,我很抱歉没有提供这个例子,我想我的解释就足够了,道歉。请告诉我发生错误的原因,因为您正在传递一个带引号的字符串列表,并选择需要不带引号的名称。如果你搜索,这个问题有很多答案。@elin我认为这不太正确;我认为OP试图将数据帧传递给
select
。诚然,这仍然不是正确的结构@Elin它以前在我的pc上工作得很好,当我将相同的代码传输到我的工作pc上时,它失败了。将再次检查。我还建议在将内容移动到不同的计算机时始终使用名称空间符号,因为您可能已加载或未加载dplyr@菲尔
names\u sub\u df非常感谢您的回答,很抱歉没有提供示例,我想我的解释就足够了,抱歉。请告诉我发生错误的原因,因为您正在传递一个带引号的字符串列表,并选择需要不带引号的名称。如果你搜索,这个问题有很多答案。@elin我认为这不太正确;我认为OP试图将数据帧传递给
select
。诚然,这仍然不是正确的结构@Elin它以前在我的pc上工作得很好,当我将相同的代码传输到我的工作pc上时,它失败了。将再次检查。我还建议在将内容移动到不同的计算机时始终使用名称空间符号,因为您可能已加载或未加载dplyr@Phil
names\u sub\u df我正在大数据框中搜索列名,我想使用dplyr select进行子集。我正在大数据框中搜索列名,我想使用dplyr select进行子集。