我真的很想从R中的数据集中删除一组行。
我的数据框如下:
ID col1 sp
R1 1.2 F
R2 2.35 F
R3 5 NA
R4 4.3 NA
R5 2.22 T
R6 1.35 F
我想根据sp列中有R5
的事实删除行T
。但我不希望它删除NA
行(即行R3和R4),因为我仍然需要col1
中的数据!
我使用的代码:
data1<-subset(data,sp!="T")
但是,这也删除了NA
列sp
列R3,R4和R5中ID
的所有行。我也尝试过:
data1<-subset(data,sp!="T",na.rm=FALSE)
但这仍然删除了所有三行 - 我只想删除“sp”列中带有“T”的行。我无法弄清楚,并已搜索但无法找到这个具体问题的答案。任何帮助都会很精彩,因为我有1000多行,而不是手动删除它们!感谢。
答案 0 :(得分:1)
处理此问题的标准方法是使用%in%
运算符:
data[!(data$sp %in% "T"),]
答案 1 :(得分:0)
您需要功能is.na
和OR(|
)运算符的组合:
data1[!data1$sp | is.na(data1$sp),]
使用子集表示法:
subset(data1, !sp | is.na(sp))
答案 2 :(得分:0)
which()
命令不显示subset命令具有的问题。例如,
ID = c("R1","R2","R3","R4","R5","R6")
col1 = c(1.2,2.35,5,4.3,2.22,1.35)
sp = c("F","F",NA,NA,"T","F")
data = data.frame(ID,col1,sp)
data1 = data[-which(data$sp=="T"),]
哪个收益率:
> data
ID col1 sp
1 R1 1.20 F
2 R2 2.35 F
3 R3 5.00 <NA>
4 R4 4.30 <NA>
5 R5 2.22 T
6 R6 1.35 F
> data1
ID col1 sp
1 R1 1.20 F
2 R2 2.35 F
3 R3 5.00 <NA>
4 R4 4.30 <NA>
6 R6 1.35 F
为确保您完全理解,which()
找到T在矢量sp中的位置索引,即
> which(data$sp=="T")
[1] 5