在R中的函数内将“,”更改为“。”

问题描述 投票:0回答:2

这是我的任务:

此数据集存在一些结构性问题,编写一个名为“ 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)

tail(countries, 5)

r function
2个回答
0
投票
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)

0
投票

这应该以简单的方式完成。使用函数,您需要了解何时传递对象(例如数据)或字符串(例如列名)。

convert_number <- function(data, col) {

  data[[col]] <- as.numeric(gsub(",", ".", as.character(data[[col]])))

  data

}

因此,您可以这样做:

convert_number(countries, "Net.Migration")


0
投票

这里有一些步骤可以在不创建您自己的功能的情况下完成此操作

#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")
© www.soinside.com 2019 - 2024. All rights reserved.