我有一个类似于此处的虚拟示例的数据框:
df<-data.frame(Group=rep(letters[1:3],each=3),Value=c('NA','NA','10','NA','4','8','NA','NA','2'))
在原始数据帧中,还有更多的组,每个组有10个值。对于每个组(a,b或c),我想提取value!= NA的第一行,但仅提取为true的第一行。就像在一个组中一样,可能存在多个与NA不同的值,并且我不能简单地将其作为子集。
我当时在想使用plyr和有条件的东西,但是老实说,我不知道该有什么条件:
ddply<-(df,.(Group),function(sub_data){
for(i in 1:length(sub_data$value)){
if(sub_data$Value!='NA'){'take value but only for the first non NA')
return(first line that satisfies)
})
也许使用其他我不知道的策略很容易,任何建议都非常感谢!
由于您plyr
首先提出了建议:
ddply(subset(df, !is.na(Value)), .(Group), head, 1L)
假设您有NA
s而没有'NA'
s。如果是后者(不推荐),则:
ddply(subset(df, Value != 'NA'), .(Group), head, 1L)
注意这有多简洁。我同意使用plyr
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句