【问题标题】:Dplyr select throws a resolve to integer error, but basic select works, why?Dplyr select 引发整数错误的解析,但基本选择有效,为什么?
【发布时间】:2017-11-26 10:13:06
【问题描述】:

我有一个大的散布数据框:

df: a1 a2 a3 a4 a5 ...............
    r  w  sd w  y ........

我有另一个输入,它是 df 的子集。

subset_df: a3 a4 a5
           f  e  u 

我的目标是获取subset_df 的列名,在df 中选择这些列并从那里继续(在我的情况下是比较值)。

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

df[,names(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)

这是一个可重现的例子:

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)

图书馆(tidyr)

【问题讨论】:

标签: r select dataframe error-handling dplyr


【解决方案1】:

在没有使用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
# ...

【讨论】:

  • 非常感谢您的回答,很抱歉没有提供示例,我认为我的解释就足够了,道歉。请好心告诉我为什么会发生错误?
  • 因为您传递的是带引号的字符串列表,并且选择需要不带引号的名称。如果你搜索,这个问题有很多答案。
  • @elin 我认为这不太对;我认为 OP 试图将数据帧传递给select。诚然,这仍然不是正确的结构?
  • @Elin 它之前在我的电脑上运行良好,当我将相同的代码传输到我的工作电脑时,它失败了。将再次检查。
  • 我还建议您在将内容移动到不同的计算机时始终使用命名空间表示法,因为您可能已加载或未加载 dplyr。 @Phil names_sub_df &lt;- names(subset_df) 是一个字符向量。这是另一个带有select() 示例stackoverflow.com/questions/33284790/… 的副本。
【解决方案2】:

从您的示例中,我不确定您是在寻找选择列还是列中的值。如果您正在搜索后者,以下内容将完成这项工作:

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

【讨论】:

  • 我正在大数据框中搜索列名,我想使用 dplyr select 进行子集化。
猜你喜欢
  • 2021-08-02
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2022-01-19
相关资源
最近更新 更多