R语言 获取第一个非NA值的索引

dy2hfwbg  于 2023-05-26  发布在  其他
关注(0)|答案(3)|浏览(196)

我有大量的经济数据。数据,所有这些都有不同的开始日期。我试图找到每个人的开始日期的索引(即第一个非零)
我试过循环和哪一个(!is.na)和位置函数。对于for循环,我得到了一个错误“closure' not subsettable”。

x <- c(NA, NA, NA, 6, 5, 3, 7, 2, 7, 8)
y <- c(NA, NA, NA, NA, NA, 3, 5, 6, 3, 9)
z <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
mydata <- data.frame(x, y, z)

for (j in 1:ncol(mydata)){
index[j] <- min(which(!is.na(mydata[,j])))}

Position(function(x) !is.na(x), mydata)

我希望结果是index = c(4,6,1)。
对于for循环,我得到了一个不可subsettable的错误,而对于Position函数,我得到了一个只有第一个元素的错误
而且我也没有Dplyr的权限

drkbr07n

drkbr07n1#

Position可以工作,但它不能一次在data.frame上工作,你必须在每一列上循环它。例如:

sapply(mydata, Position, f=Negate(is.na)) 
#x y z 
#4 6 1
mwg9r5ms

mwg9r5ms2#

我们可以使用summarise_all

library(dplyr)
mydata %>% 
   summarise_all(~which.max(!is.na(.)))

which

indx <- which(!is.na(mydata), arr.ind = TRUE)
tapply(indx[,1], indx[,2], FUN = first)
# 1 2 3 
# 4 6 1
ctrmrzij

ctrmrzij3#

我们可以这样做:

sapply(mydata, function(xx) min(which(!is.na(xx))))

#> x y z 
#> 4 6 1

相关问题