1

我正在尝试解决 R 中数据框的问题。我想计算一个新变量以显示NA我的数据框行中第一个不出现的变量。dput()我的数据的版本是下一个:

structure(list(ID = c("1387894", "533575", "219918", "734589", 
"1182091", "1442171", "880182", "2510982", "1533943", "2306853", 
"1300782"), s1 = c("A", "A", NA, NA, NA, NA, NA, NA, NA, NA, 
NA), s2 = c("A", NA, "A", "A", NA, NA, "A", "A", "A", NA, NA), 
    s3 = c("A", NA, "A", "A", "A", NA, "A", "A", "A", NA, NA), 
    s4 = c("A", NA, "A", "A", "A", "A", "A", "A", "A", NA, NA
    ), s5 = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A")), .Names = c("ID", "s1", "s2", "s3", "s4", "s5"), row.names = c(NA, 
11L), class = "data.frame")

这种形式的数据显示:

ID      s1  s2  s3  s4  s5
1387894 A   A   A   A   A
533575  A   NA  NA  NA  A
219918  NA  A   A   A   A
734589  NA  A   A   A   A
1182091 NA  NA  A   A   A
1442171 NA  NA  NA  A   A
880182  NA  A   A   A   A
2510982 NA  A   A   A   A
1533943 NA  A   A   A   A
2306853 NA  NA  NA  NA  A
1300782 NA  NA  NA  NA  A

考虑到显示第一个位置,第二个位置,...,第五个位置,我想计算一个显示每行中V第一个不出现的变量。我想得到这样的东西:NAs1s2s5

    ID      s1  s2  s3  s4  s5 V
    1387894 A   A   A   A   A  1
    533575  A   NA  NA  NA  A  1
    219918  NA  A   A   A   A  2
    734589  NA  A   A   A   A  2
    1182091 NA  NA  A   A   A  3
    1442171 NA  NA  NA  A   A  4
    880182  NA  A   A   A   A  2
    2510982 NA  A   A   A   A  2
    1533943 NA  A   A   A   A  2
    2306853 NA  NA  NA  NA  A  5
    1300782 NA  NA  NA  NA  A  5

例如,在最后一行中,您如何看到第一个未出现的NA是 ins5并且V因此具有 5 的值。我不清楚如何使这可能考虑为 col 名称建立索引。谢谢你的帮助。

4

1 回答 1

4

一种方法是apply跨行并用于which.max您的逻辑比较......

apply( df[,-1] , 1 , function(x) which.max( ! is.na(x) ) )
# 1  2  3  4  5  6  7  8  9 10 11 
# 1  1  2  2  3  4  2  2  2  5  5 
于 2013-11-12T21:23:09.377 回答