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

最初の位置、 2 番目の位置、...、 5 番目の位置を示すことを考慮して、各行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たとえば、最後の行で、最初に出現しないがありs5Vそのため値が 5 になっていることがわかります。おそらく列名のインデックスを考慮して、これを作成する方法について明確な考えがありません。ご協力いただきありがとうございます。

4

1 に答える 1

4

1つの方法は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 に答える