将多个整数列读取为字符串,尝试 gsub 并转换回整数

Read multiple integer columns as string, trying to gsub and convert back to integer

我在超过 100 列的数据框中有大约 30 列。我正在阅读的文件将其数字存储为字符。也就是说1300就是1300,R认为是一个字符。

我试图通过将 "," 替换为空并将该字段转换为整数来解决该问题。我不想在有问题的每一列上使用 gsub。我宁愿将列存储为有问题的向量并执行一个函数或 loop 对所有列。

我试过使用 lapply,但不确定要将什么作为“x”变量。

这是我的函数,下面是错误

ItemStats_2014[intColList] <- lapply(ItemStats_2014[intColList],
    as.integer(gsub(",", "", ItemStats_2014[intColList])) )

Error in [.data.table(ItemStats_2014, intColList) : When i is a data.table (or character vector), the columns to join by must be specified either using 'on=' argument (see ?data.table) or by keying x (i.e. sorted, and, marked as sorted, see ?setkey). Keyed joins might have further speed benefits on very large data due to x being sorted in RAM.

The file I am reading in stores its numbers as characters [with commas as decimal separator]

直接以十进制而不是字符串形式读取这些列: data.table::fread() 理解小数分隔符:默认为 dec=','

您可能需要稍微尝试一下 fread(..., colClasses=(...) ) 参数来指定整数列:

myColClasses <- rep('string',100) # for example...
myColClasses[intColList] <- 'integer'
# ...any other colClass fixup as needed...
ItemStats_2014 <- fread('your.csv', colClasses=myColClasses)

这种方法比读取字符串然后再转换更简单、更快速并且使用的内存更少。

尝试使用 dplyr::mutate_at() 到 select 多个列并对其应用转换。

ItemStats_2014 <- ItemStats_2014 %>%
    mutate_at(intColList, funs(as.integer(gsub(',', '', .))))

mutate_at selects 列表中的列或使用 dplyr selector 函数(参见 ?select_helpers)然后将一个或多个函数应用于每一列。 gsub 中的 . 指的是 mutate_at 传递给它的每个 selected 列。您可以将其视为 function(x) ....

中的 x