我想删除以下数据框中的"不可用",但是当我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
如何删除此数据框中的"不可用"行?
这是因为:
R data.frame
只允许每列一类数据.
创建a时data.frame
,默认行为是character
要强制转换的列factor
,它们将作为数值(对应于因子级别)与标签一起存储.你的c2
向量是一个character
向量,因为它有一个字符元素("Not Available"),因此Number
列data
是一factor
列.
当您直接强制使用因子时numeric
,结果数字表示因子水平.
要实现您所追求的行为,您可以在创建data.frame时阻止将字符数据强制转换为因子:
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
对象:
data <- data.frame(Name=c1, Number=c2) data[data$Number != 'Not Available', ]