如何不使用行号删除数据框中的指定行?
用标识符而非行号删除数据框行的解决办法
之前靠行号删行的代码是这样的:
debris_removed_stats <- slice(debris_removed_stats, -c(22))
但后续数据更新后行号会变动,很容易误删需要保留的行,所以想改用行内标识符来精准删除指定行。试了下面的代码却一直报错Error in ~-c(i) : object 'i' not found:
debris_removed_stats <- slice(debris_removed_stats, -c(i)) debris_removed_stats <- debris_removed_stats[!(debris_removed_tidy$id %in% c(i)), ]
下面给你几个靠谱的解决方法,假设你的标识符列是id,先确保你已经定义好要删除的标识符值i(比如i <- "X22",根据你数据框里的ID格式来):
方法1:用dplyr的filter(最推荐)
直接筛选出不需要删除的行,逻辑清晰不容易错:
# 先定义要删的ID i <- "你要删的标识符值" # 保留所有id不等于i的行 debris_removed_stats <- debris_removed_stats %>% filter(id != i) # 要是删多个ID,这么写 debris_removed_stats <- debris_removed_stats %>% filter(!id %in% c("ID1", "ID2"))
方法2:用dplyr的slice配合which
如果习惯用slice,可以先找到标识符对应的行索引再删除:
i <- "你要删的标识符值" debris_removed_stats <- debris_removed_stats %>% slice(-which(id == i))
好处是如果这个ID不存在,which返回空值,slice不会删任何行,不会报错。
方法3:基础R写法
你之前的基础R代码出错,大概率是数据框名称不匹配(用了debris_removed_tidy$id但赋值给debris_removed_stats),修正后就可以用:
i <- "你要删的标识符值" debris_removed_stats <- debris_removed_stats[!(debris_removed_stats$id %in% c(i)), ]
重要提醒
- 一定要先定义
i的值,比如i <- "X22",不能直接在代码里写c(i)却没给i赋值 - 检查标识符列的类型:如果ID是字符型,
i也要是字符型;如果是数值型,i就得是数值,类型不匹配会找不到目标行
内容的提问来源于stack exchange,提问作者Hayley Schmidman
相关产品推荐
相关产品推荐

