-1

我正在尝试按名称选择某些列,名称是数字。这是代码:

df2 <- df1 %>% select(`Year`, all_of(append(list1, list2))) %>%

我收到此错误:

错误:不能对不存在的列进行子集化。x 位置 61927、169014、75671、27059、225963 等不存在。i 只有 5312 列。

我认为错误是由于列名是数字。我该如何解决?(我想将列名保留为数字)

4

3 回答 3

1

我们可以使用any_ofwith paste,这样如果有数值作为列名,它仍然可以工作,如果其中一些也丢失了,它不会抛出错误

library(dplyr)
df1 %>% 
    select(Year, any_of(paste(c(list1, list2))))
于 2021-09-25T17:52:11.667 回答
0

您可以使用 janitor 包清理列名。

df1 <- janitor::clean_names(df1)
于 2021-09-25T18:46:46.237 回答
0

如果您在选择中插入一个数字,它将用作位置,购买您可以将数字用作字符。

例子

library(dplyr)

df <-  tibble(`2020` = NA,`2021` = NA, "var" = NA)

df

# A tibble: 1 x 3
  `2020` `2021` var  
  <lgl>  <lgl>  <lgl>
1 NA     NA     NA 

在选择中使用数字

我会给出一个错误,因为只有 3 个变量,如果您使用 2020 将搜索第 2020 列。

df %>% 
  select(2020)

错误:不能对不存在的列进行子集化。x 位置 2020 不存在。i 只有 3 列。

在选择中使用数字作为字符串

df %>% 
  select("2020")

# A tibble: 1 x 1
  `2020`
  <lgl> 
1 NA  
于 2021-09-25T17:23:28.853 回答