R:使用select_if()和gsub()时,将字符类型转换为数字类型时出错

R:使用select_if()和gsub()时,将字符类型转换为数字类型时出错,r,dplyr,type-conversion,pipeline,R,Dplyr,Type Conversion,Pipeline,我有多种类型的数据集。它是在Excel电子表格中创建的,因此某些数字包含逗号(例如1346而不是1346)。因此,将它们设置为字符类型而不是数字类型 以下是我试图进行转换的内容: df[-2] %>% select_if(is.character) %>% as.numeric(gsub(",", "", df)) 我将从选择中排除第二列,因为它对于我的分析是有效的字符类型 我得到的错误是: Error in df[-2] %&g

我有多种类型的数据集。它是在Excel电子表格中创建的,因此某些数字包含逗号(例如1346而不是1346)。因此,将它们设置为字符类型而不是数字类型

以下是我试图进行转换的内容:

df[-2] %>% 
  select_if(is.character) %>% 
  as.numeric(gsub(",", "", df))
我将从选择中排除第二列,因为它对于我的分析是有效的字符类型

我得到的错误是:

Error in df[-2] %>% select_if(is.character) %>% as.numeric(gsub(",",  : 
  'list' object cannot be coerced to type 'double'

我怎样才能做到这一点呢?

如果我们需要这样做来替换
在所有
字符
列上空白(
),请使用
使用
突变
,因为
gsub/sub
等将
向量
作为输入,而不是
数据。frame

library(stringr)
library(dplyr)
df1 <- df %>%
   mutate(across(where(is.character), ~ as.numeric(str_remove_all(., ','))))

这已删除逗号,但列仍为字符类型。由于我需要选择我打算使用管道的柱,以避免必须单独转换每个特征。如何将上面的代码转换为包含此内容?@Joehat只需将
包装为.numeric
。对不起,我忘了。我更新了帖子!最后一件事。。。我需要从选择中排除第二列,因为它包含有效的字符类型。通过在上面的示例中执行df[-2],它将完全排除它。有没有一种方法可以再次修改代码,以避免将这些列合并到新的df1数据集中?@Joehat您可以试试update@Joehat为了防止错误,最好指定列名而不是列号,即-2可以是-col2
df1 <- df %>%
       mutate(across(c(where(is.character), -2), ~ 
               as.numeric(str_remove_all(., ','))))
df <- structure(list(col1 = 1:5, col2 = c("a", "b", "c", "d", "e"), 
    col3 = c("1,2", "1,5", "1,3", "1,44", "1,46"), col4 = c("1,2", 
    "1,5", "1,3", "1,44", "1,46")), class = "data.frame", row.names = c(NA, 
-5L))