我想删除" 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;这个数据框中的行?
答案 0 :(得分:5)
这是因为:
data.frame
每列只允许一类数据。 data.frame
时,默认行为是将character
列强制转换为factor
,这些列将作为数字值(对应于因子级别)与标签一起存储。您的c2
向量是character
向量,因为它有一个字符元素(“不可用”),因此Number
的{{1}}列是data
}专栏。factor
时,结果数字表示因子级别。 要实现您所追求的行为,您可以在创建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),]