从列中的行中删除NA和空行

时间:2018-12-04 18:03:53

标签: r

我的R代码无法正常工作。

我正在尝试从CrimeData数据集中的Weapon.Description列中删除所有空格和NA值。然后打印出列的标题(减去空白和NA)。

这是我当前的代码,尽管由于某些原因它不能删除空格:

crimeData[!(!is.na(crimeData$Weapon.Description) & 
crimeData$Weapon.Description==""), ]
head(crimeData$Weapon.Description)

[1] STRONG-ARM (HANDS, FIST, FEET OR BODILY FORCE)
[2]                                            
[3] 
[4]                                                                                             
[5]STRONG-ARM (HANDS, FIST, FEET OR BODILY FORCE)

3 个答案:

答案 0 :(得分:2)

您的逻辑有些偏离:

  • !is.na(crimeData$Weapon.Description)为您提供内容不为NA的行
  • crimeData$Weapon.Description=="")为您提供内容为空字符串的行
  • !(...&...)否定了它,因此您要查询所有“非(非NA且为空)”的行。

也许您想要“不(不适用或为空)”?其中之一应该起作用:

crimeData[ !crimeData$Weapon.Description %in% c("", NA), ]
crimeData[ !is.na(crimeData$Weapon.Description) & crimeData$Weapon.Description != "", ]
crimeData[ !( is.na(crimeData$Weapon.Description) | crimeData$Weapon.Description == ""), ]
crimeData[ !is.na(crimeData$Weapon.Description) & nzchar(crimeData$Weapon.Description), ]

不确定这是否是一个因素,但这不会捕获“仅1个以上的空格”。如果是这样,您可能要先做

crimeData$Weapon.Description <- trimws(crimeData$Weapon.Description)

答案 1 :(得分:1)

na.omit的形式读取所有空格,然后使用crimeDate <- read.csv(file=file.choose(), na.strings = c("", "NA")) na.omit(crimeDate$Weapon.Description) 删除

init message

答案 2 :(得分:0)

我假设您正在尝试删除NA的整个行。如果是这样,请尝试以下操作:

crimeData[which(is.na(crimeData$Weapon.Description) == FALSE),]

which是合乎逻辑的;将is.na()设置为FALSE意味着将删除所有NA