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

时间:2019-12-17 18:30:34

标签: r function

这是我的任务:

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

4 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分: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")

答案 2 :(得分:-1)

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

convert_number <- function(data, col) {

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

  data

}

因此,您可以这样做:

convert_number(countries, "Net.Migration")

答案 3 :(得分:-1)

这是一个带有可复制示例的答案

df <- data.frame("V1" = c("2,78", "3,54", "1,09", "0,08"),
                 "V2" = c("2,78", NA, NA, "0,08"),
                 "V3" = c("23,78", "31,54", "11,09", "88,08"))
my_fun <- function(x){
  x[, c(1:length(x))] <- lapply(x[, c(1:length(x))], function(k){
    a <- gsub(",", ".", k, fixed = TRUE)
    b <- as.numeric(a)
  })
  return(x)
}

res <- my_fun(df)

print(res)
    V1   V2    V3
1 2.78 2.78 23.78
2 3.54   NA 31.54
3 1.09   NA 11.09
4 0.08 0.08 88.08