R 绑定行(),列可以';不能从整数转换为字符错误

R 绑定行(),列可以';不能从整数转换为字符错误,r,dplyr,R,Dplyr,我已经看到了这个答案:但是我不能改变所有的()一个列表 library(rvest) library(dplyr) library(tidyr) fips <- read_html("https://www.census.gov/geo/reference/ansi_statetables.html") %>% html_nodes("table") %>% html_table() %>% bind_rows(.[[1]][1:3] %>%

我已经看到了这个答案:但是我不能
改变所有的()
一个列表

library(rvest)
library(dplyr)
library(tidyr)

fips <- read_html("https://www.census.gov/geo/reference/ansi_statetables.html") %>% 
  html_nodes("table") %>% 
  html_table() %>% 
  bind_rows(.[[1]][1:3] %>% 
          transmute(name = `Name`,
                    fips = as.character(`FIPS State Numeric Code`),
                    abb = `Official USPS Code`),
        filter(.[[2]][1:3], !grepl("Status",c(`Area Name`))) %>% 
          transmute(name = `Area Name`,
                    fips = as.character(`FIPS State Numeric Code`),
                    abb = `Official USPS Code`))

Error in bind_rows_(list_or_dots(...), id = NULL) : 
  Column `FIPS State Numeric Code` can't be converted from integer to character
库(rvest)
图书馆(dplyr)
图书馆(tidyr)
fips%
html_节点(“表”)%%>%
html_表()%>%
绑定行([1]][1:3]]>%
transmute(name=`name`,
fips=as.character(`fips状态数字代码`),
abb=`美国邮政官方代码'),
过滤器(.[2]][1:3],!grepl(“状态”,c(`Area Name`))%>%
transmute(名称=`Area name`,
fips=as.character(`fips状态数字代码`),
abb=`美国邮政官方代码')
绑定行中出错(列表或点(…),id=NULL):
“FIPS状态数字代码”列无法从整数转换为字符
但是,此代码工作正常:

fips <- read_html("https://www.census.gov/geo/reference/ansi_statetables.html")

dat3 <- fips %>%
  html_nodes("table") %>% 
  html_table()

rbind(dat3[[1]][1:3] %>% 
        transmute(name = `Name`,
                  fips = `FIPS State Numeric Code`,
                  abb = `Official USPS Code`),
filter(dat3[[2]][1:3], !grepl("Status",c(`Area Name`))) %>% 
  transmute(name = `Area Name`,
            fips = `FIPS State Numeric Code`,
            abb = `Official USPS Code`))
fips%
html_表()
rbind(dat3[[1]][1:3]]>%
transmute(name=`name`,
fips=`fips状态数字代码`,
abb=`美国邮政官方代码'),
过滤器(dat3[[2]][1:3],!grepl(“状态”,c(`Area Name`)))%>%
transmute(名称=`Area name`,
fips=`fips状态数字代码`,
abb=`美国邮政官方代码')

正如@akrun在评论中指出的,bind_行是类型敏感的。因此,我将首先使用dplyr中的
lappy
对列表中的
if
进行变异,然后
bind\u行
字符数据帧,
setNames
能够调用
过滤器中的变量,在最后一步中按区域名称进行筛选:

fips <- read_html("https://www.census.gov/geo/reference/ansi_statetables.html") %>% 
  html_nodes("table") %>% 
  html_table() %>% 
  lapply(., mutate_if, is.integer, as.character) %>%
  bind_rows() %>%
  setNames(gsub(" ", "_", names(.))) %>%
  filter(!grepl("Status", Area_Name)) %>%
  mutate(Name = ifelse(is.na(Name), Area_Name, Name)) %>%
  select(Name, FIPS_State_Numeric_Code, Official_USPS_Code)
fips%
html_节点(“表”)%%>%
html_表()%>%
lapply(,mutate_if,is.integer,as.character)%>%
绑定_行()%>%
集合名称(gsub(“,”_u)”,名称(.))%>%
过滤器(!grepl(“状态”,区域名称))%>%
突变(Name=ifelse(is.na(Name),Area_Name,Name))%>%
选择(名称、FIPS\州\数字\代码、官方\美国邮政\代码)

bind_rows
对类型的变化很敏感,而
rbind
则不敏感。我认为评估中还存在其他问题,可能是评估顺序,因为OP确实将两个数据集转换为相同的类别。如果您单独执行此操作,即创建两个对象,然后执行
bind_rows
,它工作得很好我编辑了代码(最后两行
mutate
select
以及名称和区域名称的组合。但不确定这是否是他期望的结果。如果他不想要代码为
的行,只需添加
%>%过滤器(!is.na(官方代码))
看起来不错,谢谢!不过我还是不明白上面的代码为什么不起作用。