我有一个带字段的数据框(SCV)(DELETE_CUSTOMER)。我想删除DELETE_CUSTOMER!=" Y"的数据框中的行。目前,此字段全部为NA
- 但这是一个随着时间的推移而增长的数据框,因此将来可能会有Y.
目前我正在尝试以下方法:
DELETIONS <- which(is.na(SCV_DELTA_R$DELETE_CUSTOMER) !=T &
SCV_DELTA_R$DELETE_CUSTOMER == "Y")
SCV_DELTA_R <- SCV_DELTA_R[-DELETIONS, ]
这给了我相同的行数,但表中所有字段的所有值都是NA
。
DELETIONS列表不包含任何内容,其名称为:
integer(0)
因此,它不会删除任何内容,而是删除所有数据。
答案 0 :(得分:0)
表达式
which(is.na(SCV_DELTA_R$DELETE_CUSTOMER)!=T & SCV_DELTA_R$DELETE_CUSTOMER=="Y")
返回一个空结果,因为你说你的data.frame中没有任何“Y”:表达式选择值等于“Y”的行(这也意味着它不是“NA”,因此,包含表达式的第一部分也没有用。)
由于您没有任何“Y”,表达式返回空,因此DELETIONS为空,并且调用SCV_DELTA_R[-DELETIONS,]
完全清除您的表。
如果您要删除值为“Y”的所有行或 NA我建议:
DELETIONS=which(is.na(SCV_DELTA_R$DELETE_CUSTOMER) | SCV_DELTA_R$DELETE_CUSTOMER=="Y")
如果您只想删除值为“Y”的所有行,我建议:
DELETIONS=which(SCV_DELTA_R$DELETE_CUSTOMER=="Y")
如果你想删除只有NA的所有行我建议:
DELETIONS=which(is.na(SCV_DELTA_R$DELETE_CUSTOMER))
如果你想删除价值不同于“Y”的所有行,我建议(这会清除你的表,因为你说你没有任何“Y”):
DELETIONS=which(SCV_DELTA_R$DELETE_CUSTOMER!="Y")
我希望这对你有所帮助。
答案 1 :(得分:0)
您可以翻转逻辑以选择要保留的内容,即任何不是"Y"
的条目
SELECTIONS <- !SCV_DELTA_R$DELETE_CUSTOMER %in% "Y"
SCV_DELTA_R <- SCV_DELTA_R[SELECTIONS, ]
因此NA
SELECTED
的值