我的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)
答案 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
。