私はこのようなものを並べ替えようとしています:
State Value
AK 1
WA 3
LA NA
AK NA
OR 1
DL 1
次に、ランク 2 の状態を見つけようとします。
「値」の順に並べ替えると、次のようになります。
State Value
AK 1
OR 1
DL 1
WA 3
LA NA
AK NA
しかし、これは私が望むランキングではありません。アルファベット順に並べ替えたいので、ランク 2 は OR ではなく DL にする必要があります。
私がそれを行う方法は、while ループを使用して、上下または同じ値を持つ状態があるかどうかを確認し、同じ値を持つすべての状態を取得することです。それらを取り出して並べ替え、位置をマッピングします。
count <- 2
ucount <- 0
dcount <- count
while (data$Value[count] == data$Value[count + 1]) {
dcount <- dcount + 1
count <- dcount
}
count <- num
while (data$Value[count] == data$Value[count - 1]) {
ucount <- ucount + 1
count <- count - 1
}
if (dcount == 2 && ucount == 0) {
result <- as.character(data$State[2])
}
else if (dcount != num) {
result <- as.character(sort(data[ucount:dcount, "State"])[1])
}
else {
result <- as.character(sort(data[ucount:dcount, "State"])[ucount + 1])
}
result
このコードは醜いですが、機能しますが、以下に NA 値がない場合のみです。
私たちが持っていない場合
State Value
WA 3
データフレームは次のようになります
State Value
AK 1
OR 1
DL 1
LA NA
AK NA
そうすると、NA である LA の値と比較しようとするため、コードは機能しません。NA が表示されたときに while ループを停止するように指示したいのですが、R では NA で何もできないようです。
これはおそらくあまり賢明ではないことはわかっていますが、それが私が考えることができる唯一の方法です。私はまだ R にかなり慣れていないので、これがばかげた質問でないことを願っています。ご協力いただきありがとうございます!
PS私はこの投稿をチェックしました列でデータフレームをソートする方法は? 、これは確かに私がやりたかったことと似ています。しかし、私の質問は、NA をどのように処理するかについてです。私の問題をうまく解決できる別の方法 (あまりスマートではないことはわかっています) があることを嬉しく思いますが、この質問で NA に関するいくつかの洞察を得ることができることを願っています。