R:使用select_if()和gsub()时,将字符类型转换为数字类型时出错
我有多种类型的数据集。它是在Excel电子表格中创建的,因此某些数字包含逗号(例如1346而不是1346)。因此,将它们设置为字符类型而不是数字类型 以下是我试图进行转换的内容: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
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))