这是我的任务:
此数据集存在一些结构性问题,编写一个名为“ convert_number”的函数,该函数将完成以下任务:-更改列中的数字,以使“,”为“。”-将该栏转换为双栏
convert_number <- function(data, col) {
countries[col] <- as.character(countries[col])
countries[col] <- scan(text=countries[col], dec=",", sep=".") (countries[col] <- as.double())
}
convert_number("countries", "Net.migration")
我首先做了以下事情:
countries$Net.migration <- sub("^$", "0", countries$Net.migration)
为了将所有空格都更改为“ 0”,以便我可以切换逗号,但是我意识到我的作业中还有一个问题问一列中的NA数量,所以我不能有“ 0”在这些单元格中。我想有一种比scan(text = ...)更好的方法?
我是一个初学者(尤其是具有函数的人),我认为我正在忽略一种更简单的方法。
这里是一个示例:tail(countries,5)
convert_number <- function(x){
x <- as.character(x)
x <- gsub(pattern = ",", replacement = ".",x = x, fixed = TRUE)
x <- as.numeric(x)
return(x)
}
此函数将被矢量化,因此您可以这样称呼它
data$Coastline..coast.area.ratio <- convert_number(data$Coastline..coast.area.ratio)
或者您可以调用它并应用于所有列
data <- apply(data, 2, convert_number)
这应该以简单的方式完成。使用函数,您需要了解何时传递对象(例如数据)或字符串(例如列名)。
convert_number <- function(data, col) {
data[[col]] <- as.numeric(gsub(",", ".", as.character(data[[col]])))
data
}
因此,您可以这样做:
convert_number(countries, "Net.Migration")
这里有一些步骤可以在不创建您自己的功能的情况下完成此操作
#random numbers with commans
charnum <- c("324,34","345435,50","234324",NA)
#switch commas with .
charnum3 <- gsub(",",".",charnum)
#change to numeric
charnum3 <- as.numeric(charnum3)
#sum missing values
sum(is.na(charnum3))
df <- data.frame(charnum, stringsAsFactors = FALSE)
convert_number <- function(data,col) {
x1 <- gsub(",",".",data[[col]])
x2 <- as.numeric(x1)
return(x2)
}
df$charnum2 <- convert_number(df,"charnum")