我正在尝试对这样的事情进行排序:
State Value
AK 1
WA 3
LA NA
AK NA
OR 1
DL 1
然后尝试找到说 rank 2 的状态。
如果我按“价值”的顺序排序,它会变成这样:
State Value
AK 1
OR 1
DL 1
WA 3
LA NA
AK NA
但这不是我想要的排名。我想按字母顺序对其进行排序,这意味着排名 2 应该是 DL 而不是 OR。
我这样做的方法是使用while循环来检查是否有高于和低于OR的状态具有相同的值,并获得具有相同值的所有状态。将它们取出并重新排序,然后绘制它们的位置。
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
然后代码将不起作用,因为它会尝试与 LA 的值进行比较,即 NA。我想告诉 while 循环在看到 NA 时停止,但 R 似乎不允许我对 NA 做任何事情。
我知道这可能不是很聪明,但这是我能想到的唯一方法。我对 R 还是很陌生,我希望这不是一个愚蠢的问题。谢谢你的帮助!
PS我已经检查了这篇文章如何按列对数据框进行排序?,这确实与我想做的类似。但是,我的问题是关于如何处理 NA。我很高兴我的方法有另一种方法(我知道这不是很聪明,哈哈)可以很好地解决我的问题,但我仍然希望通过这个问题我能看到一些关于 NA 的见解。