我想删除以下数据框中的"不可用",但是当我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)
Run Code Online (Sandbox Code Playgroud)
结果是:
data
## Name Number
## 1 India 2
## 2 America 3
## 3 China 4
## 4 Europe 1
## 5 Japan 1
Run Code Online (Sandbox Code Playgroud)
如何删除此数据框中的"不可用"行?
这是因为:
data.frame只允许每列一类数据.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
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过字符将因子强制转换为数字:
data$Number <- as.numeric(as.character(data$Number))
Run Code Online (Sandbox Code Playgroud)
根据您的要求,这些选项都不会"删除不可用的行".它们只是将"不可用"元素(以及列的任何其他"文本"元素Number)转换为NA.要删除包含"不可用"的行,您可以执行以下操作:
data <- data.frame(Name=c1, Number=c2, stringsAsFactors=FALSE)
na.omit(data)
Run Code Online (Sandbox Code Playgroud)
或者,使用您的原始data对象:
data <- data.frame(Name=c1, Number=c2)
data[data$Number != 'Not Available', ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3826 次 |
| 最近记录: |