R 为数据帧中的特定列查找第一个非NA的索引

R 为数据帧中的特定列查找第一个非NA的索引,r,dataframe,R,Dataframe,我有一个多栏的数据框。某些数据丢失(NA)。我按一列对数据帧进行了排序,现在数据已正确排序,但NA被排序为最后一个值。 我想得到最后一个非na值的索引 column1 column2 1 2 2 na 3 some data 4 some data na some data na some data na some data 所以我想得到4的索引。 我试过了 但它似乎不返回na值。您似乎需要以下表达式: max(wh

我有一个多栏的数据框。某些数据丢失(NA)。我按一列对数据帧进行了排序,现在数据已正确排序,但NA被排序为最后一个值。 我想得到最后一个非na值的索引

column1 column2
1       2
2       na
3       some data
4       some data
na      some data
na      some data
na      some data
所以我想得到4的索引。 我试过了


但它似乎不返回na值。

您似乎需要以下表达式:

max(which(complete.cases(DF$column1)))

似乎您需要此表达式:

max(which(complete.cases(DF$column1)))

我被这个线程吸引,因为我需要在数据帧的每一列中找到第一个非NA。尽管最初的问题实际上是关于在专栏中找到最后一个非NA,但我还是能够从其他人的答案中找到第一个非NA。我在下面列出了两者,以防有人对同一件事感到疑惑

下面是示例数据。请注意,列应该在每列的开头或结尾使用NAs进行排序

(df <- data.frame(c=c(NA,NA,13,14,15), 
             d=c(16,17,NA,NA,NA), 
             e=c(NA,NA,NA,NA,NA), 
             f=c(18,19,20,21,22)))
   c  d  e  f
1 NA 16 NA 18
2 NA 17 NA 19
3 13 NA NA 20
4 14 NA NA 21
5 15 NA NA 22

(df我被这个帖子吸引,因为我需要在数据框的每一列中找到第一个非NA。尽管最初的问题实际上是关于在一列中找到最后一个非NA,但我能够从其他人的答案中找出第一个非NA。我在下面列出了这两个,以防有人对同一件事感到疑惑

下面是示例数据。请注意,列应该在每列的开头或结尾使用NAs进行排序

(df <- data.frame(c=c(NA,NA,13,14,15), 
             d=c(16,17,NA,NA,NA), 
             e=c(NA,NA,NA,NA,NA), 
             f=c(18,19,20,21,22)))
   c  d  e  f
1 NA 16 NA 18
2 NA 17 NA 19
3 13 NA NA 20
4 14 NA NA 21
5 15 NA NA 22

(df你是说
哪个(is.na(df$column1))[1]-1
?这可能是重复的-你搜索过
[r]第一个na值吗?
?这有点让人困惑,因为你的标题似乎与你的问题不匹配。我想他想要
max(is.na(df$column1))
max(which(complete.cases(DF$column1))
。这肯定是一堆东西的重复。“na”与na不同。您的数据是真的有na还是na?它表示为不可用?转换所有当前的“不可用”可能是个好主意将数据中的条目添加到
NA
中,因此R将在后续操作中处理这些条目。否则,例如,在示例数据中,列1不能是
数值的
,因为在同一列中有字符串(“NA”)。您是指
哪个(即.NA(DF$column1))[1]-1
?这可能是重复的-您是否搜索过
[r]第一个NA值
?这有点混乱,因为您的标题似乎与您的问题不匹配。我想他想要
max(哪个(!is.NA(DF$column1))
max(哪个(complete.cases(DF$column1)))
。这肯定是一堆东西的重复。“na”与na不同。您的数据是真的有na还是na?它表示为不可用?转换所有当前的“不可用”可能是个好主意将数据中的条目添加到
NA
,以便R在后续操作中处理这些条目。否则,例如,在示例数据中,第1列不能是
数字的,因为您有字符串(“NA”)在同一列中。我尝试了您的解决方案,但它返回DF的最后一行,而不是非na column1值的最后一行。那么最后一行在此列中没有
na
。嗯,初学者问题:在我的DF中,na值表示为不可用。R是否也将其视为na,或者它是R的正常字符串?如果是,我可以尝试最后一个整数是ok,因为该列的数据只是整数,那么使用
read.table(…,na.strings=“notavailable”)读取数据如何
?我尝试了您的解决方案,但它返回的是DF的最后一行,而不是非na column1值的最后一行,那么最后一行在此列中没有
na
。嗯,初学者问题:在我的DF中,na值表示为不可用。R是否也将其视为na,或者它是R的正常字符串?如果是,我可以尝试查找last整数,因为该列的数据仅为整数,那么使用
read.table(…,na.strings=“Not Available”)
读取数据如何?
?谢谢,这很有用。在每列中查找第一个na的代码可以简化为:
sapply(d,function(col)min(这(!is.na(col))
(即
lappy
和默认情况下应用于
data.frame
的变体在列中迭代。)谢谢,这很有用。在每列中查找第一个NA的代码可以简化为:
sapply(d,function(col)min(即(!is.NA(col))
(即
lappy
和应用于
数据帧的变体。默认情况下,
在列中迭代。)
(x2 <- sapply(seq_len(ncol(df)), function(x) df[,x] [min(which(!is.na(df[,x])))]))
[1] 13 16 NA 18
(x3 <- sapply(seq_len(ncol(df)), function(x) df[,x] [min(which(complete.cases(df[,x])))]))
[1] 13 16 NA 18
y1 <- vector("numeric")
for (j in 1:ncol(df)) {
  y1[j] <- df[,j][max(which(!is.na(df[,j])))]
}
> y1
[1] 15 17 NA 22

(y2 <- sapply(seq_len(ncol(df)), function(x) df[,x] [max(which(!is.na(df[,x])))]))
[1] 15 17 NA 22
(y3 <- sapply(seq_len(ncol(df)), function(x) df[,x] [max(which(complete.cases(df[,x])))]))
[1] 15 17 NA 22