处理数字列中的非数字值

时间:2019-05-05 18:53:22

标签: r

我有一个电子表格,其中的列名称为自动编号,在该电子表格下方的最大值为几个“ *”值

CityName    Autonumber
NYC         2
Atlanta     4
Nashville   8
Boston      6
LA          *
Vegas       3
Florida     *

我如何:-

方案a)删除带有“ *”值的行
方案b)将自动编号的平均值替换为“ *”

3 个答案:

答案 0 :(得分:1)

是这样吗?
首先,我用NA代替"?"

df$Autonumber <- as.character(df$Autonumber)
is.na(df$Autonumber) <- df$Autonumber == "?"
df$Autonumber <- as.numeric(df$Autonumber)

现在问题要问什么。

# 1) remove rows with NA
i <- is.na(df$Autonumber)
df[!i, ]

# 2) replace NA's by mean value
df$Autonumber[i] <- mean(df$Autonumber, na.rm = TRUE)
df

数据。

df <- read.table(text = "
CityName    Autonumber
NYC         2
Atlanta     4
Nashville   8
Boston      6
LA          ?
Vegas       3
Florida     ?                 
", header = TRUE)

答案 1 :(得分:1)

此问题可能重复,请参见此链接。

Filter multiple values on a string column in dplyr

无论如何:

  • 方案A
library(dplyr)
df # your dataframe

cA <- df %>% 
  dplyr::filter(Autonumber != "?")

  • 场景B
MAutonumber  <- mean(df$Autonumber)
MAutonumberX <- mean(df$Autonumber, na.rm = T)

cB1 <- df %>% 
  dplyr::mutate(Autonumber = ifelse(Autonumber == "?", MAutonumber, Autonumber))

cB1 <- df %>% 
  dplyr::mutate(Autonumber = ifelse(Autonumber == "?", MAutonumberX, Autonumber))

请注意,有几种方法可以做您想要的事情。

https://stackoverflow.com/a/41588616/9699371

答案 2 :(得分:0)

场景a和b放在一起:

else

确保其余数字是数字而不是因数