如何删除"不可用"在数据框中

时间:2016-01-02 03:45:40

标签: r dataframe

我想删除" Not Available"在以下数据框中,但是当我使用以下代码将Number更改为数字时,"不可用"变为4

c1 <- c("India", "America", "China", "Europe", "Japan")
c2 <- c(2.3, 3.5, "Not Available", 1.2, 1.2)
data <- data.frame(Name=c1, Number=c2)
data$Number <- as.numeric(data$Number)

结果是:

data

##      Name Number
## 1   India      2
## 2 America      3
## 3   China      4
## 4  Europe      1
## 5   Japan      1

如何删除&#34;不可用&#34;这个数据框中的行?

2 个答案:

答案 0 :(得分:5)

这是因为:

  1. R data.frame每列只允许一类数据。
  2. 当您创建data.frame时,默认行为是将character列强制转换为factor,这些列将作为数字值(对应于因子级别)与标签一起存储。您的c2向量是character向量,因为它有一个字符元素(“不可用”),因此Number的{​​{1}}列是data }专栏。
  3. 当您将因子直接强制转换为factor时,结果数字表示因子级别。
  4. 要实现您所追求的行为,您可以在创建data.frame时阻止字符数据被强制转换为因素:

    numeric

    或者,您可以通过字符将因子强制转换为数字:

    data <- data.frame(Name=c1, Number=c2, stringsAsFactors=FALSE)
    data$Number <- as.numeric(data$Number)
    
    data
    ##      Name        Number
    ## 1   India           2.3
    ## 2 America           3.5
    ## 3   China            NA
    ## 4  Europe           1.2
    ## 5   Japan           1.2
    

    根据您的要求,这些选项都不会“删除不可用的行”。他们只是将“不可用”元素(以及data$Number <- as.numeric(as.character(data$Number)) 列的任何其他“文本”元素)转换为Number。要删除包含“不可用”的行,您可以执行以下操作:

    NA

    或使用原始data <- data.frame(Name=c1, Number=c2, stringsAsFactors=FALSE) na.omit(data) 对象:

    data

答案 1 :(得分:2)

我们还可以在na.strings = "Not Available"中使用read.csv/read.table读取数据集,以便它返回NA值,可以使用?is.na?complete.cases删除或?na.omit

df1 <- read.csv("file.csv", na.strings="Not Available")
res <- df1[complete.cases(df1$Number),]