R检查数字的字符值并自动更改var数据类型
R check character values for numeric and change var datatype automatically
我有很多数据框,其中所有数据都是字符。我猜想应该将包含数字的 var 更改为数字数据类型。虽然我有 100 列,所以我不想为了更改它而逐一键入要更改的列。
有没有另一种方法可以自动执行此过程并扫描一列数据检查字符是否具有数值并将其从字符类型更改为数字类型?
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c("21000", "23400", "26800")
gender <- c("M", "M", "F")
rank <- c("5", "109", "2")
df <- data.frame(employee, salary, gender, rank)
我不想每次都这样做 column/var
df$rank <- as.numeric(df$rank)
我想做这样的事情
i <- sapply(df, is.vector.of.columns.contaning.numeric.values)
df[i] <- lapply(df[i], as.numeric)
我们可以写一个带有数字条件的函数。它通过尝试 as.numeric
并检查它是否 returns NA
来工作,如果是,这意味着该值不能被强制转换为明确的数字。发生这种情况时,该函数将保持列不变。
smartConvert <- function(x) {
if(any(is.na(as.numeric(as.character(x))))) x else as.numeric(x)
}
df[] <- lapply(df, smartConvert)
str(df)
# 'data.frame': 3 obs. of 4 variables:
# $ employee: Factor w/ 3 levels "John Doe","Jolie Hope",..: 1 3 2
# $ salary : num 1 2 3
# $ gender : Factor w/ 2 levels "F","M": 2 2 1
# $ rank : num 3 1 2
我有很多数据框,其中所有数据都是字符。我猜想应该将包含数字的 var 更改为数字数据类型。虽然我有 100 列,所以我不想为了更改它而逐一键入要更改的列。 有没有另一种方法可以自动执行此过程并扫描一列数据检查字符是否具有数值并将其从字符类型更改为数字类型?
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c("21000", "23400", "26800")
gender <- c("M", "M", "F")
rank <- c("5", "109", "2")
df <- data.frame(employee, salary, gender, rank)
我不想每次都这样做 column/var
df$rank <- as.numeric(df$rank)
我想做这样的事情
i <- sapply(df, is.vector.of.columns.contaning.numeric.values)
df[i] <- lapply(df[i], as.numeric)
我们可以写一个带有数字条件的函数。它通过尝试 as.numeric
并检查它是否 returns NA
来工作,如果是,这意味着该值不能被强制转换为明确的数字。发生这种情况时,该函数将保持列不变。
smartConvert <- function(x) {
if(any(is.na(as.numeric(as.character(x))))) x else as.numeric(x)
}
df[] <- lapply(df, smartConvert)
str(df)
# 'data.frame': 3 obs. of 4 variables:
# $ employee: Factor w/ 3 levels "John Doe","Jolie Hope",..: 1 3 2
# $ salary : num 1 2 3
# $ gender : Factor w/ 2 levels "F","M": 2 2 1
# $ rank : num 3 1 2