我想对数据框执行操作,忽略具有NA
值的行(但是,我不想删除具有NA
值的行,我仍然希望它们在数据中帧)。我实际上已经设法做到了这一点,但我的计算效率更高,因为我的非常非常慢。
比方说,我们有一个数据框如下:
Number | Object
10 | Car
11 | Book
12 | Pen
13 | Door
NA | Computer
14 | Cup
15 | Book
我希望对此数据框执行操作,我希望在数据框中访问上一个/下一个Object
,但条件是Number
列没有{ {1}}该索引的值。例如,假设我在NA
列的索引4处(这意味着'Number'是13而Number
是Door),我想要访问下一个对象,以便Object
列中没有NA
值。这意味着,由于索引5在Number
列中有NA
,因此我会转到索引6,因为它在Number
列中有14,因此我会将Cup作为对象而不是电脑
现在,如上所述,我实际上已经实现了一个这样的方法,通过基本上使用Number
和which()
以及min()
等功能的组合来执行此任务。但我追求的是一个方法/函数,它的计算效率要高得多,因为我有很多数据要处理(我使用的方法非常慢且效率低,因为它需要检查大量值)。是否有更高效的计算方法来完成此任务?提前谢谢。
答案 0 :(得分:0)
您可以尝试:
a$Object[!is.na(a$Number)][i+1]
其中a
是您的数据框,i
是您当前所在的索引。
答案 1 :(得分:-1)
我建议您查看 na 功能。
这是一个很好的资源来源: HOW DOES R HANDLE MISSING VALUES?
看看下面代码的复杂性:
a<-data.frame(c(15,25,35,NA,55),c("a","b","c","d","e"))
colnames(a)<-c("Number","Object")
a
i = 1
while(i<length(a$Number)-1){
if (!is.na(a$Number[i])){
if (!is.na(a$Number[i+1])){
print(a$Object[i+1])
i = i + 1
}
else{
print(a$Object[i+2])
i = i + 2
}
}
}
当然,您可以部署单行功能。