我有一个包含NaN和Inf的数据帧.我想根据变量(Q)对数据进行排名.所以,我正在使用

rank(df$Q, ties.method= "first")

#> [1]  3  5  6  4  2  9  7 10  8  1

如你所见,即使是NaN和Inf也是排名的.

因此,如果数据包含NaN和Inf,我想忽略排名.我正在使用以下代码:

#Checking if Q is valid
if((df$Q %in% "NaN") || (df$Q %in% "Inf")){
  RankingQ <- rep("-", nrow(df))
}else{
  RankingQ <- rank(df$Q, ties.method= "first") 
}

它返回以下错误:

错误(%"NaN"中的df$q%)||(%"inf"中的df$q%): 强制"逻辑(1)"中的"长度=10"

以前,它在出现警告(版本)时才起作用.4.2.0).但在R版本4.3.0中,它返回错误

使用长度大于1的LHS或(如果判断)RHS调用&amp;&amp;或||现在总是错误的,并显示以下形式的报告

强制"逻辑(1)"中的"长度=4"

我的意见是

df <- structure(list(Alternatives = 1:10, Q = c(0.375, 0.5, 0.5, 0.469, 
0.219, NaN, Inf, NaN, Inf, 0.153)), class = "data.frame", row.names = c(NA, 
-10L))

我想要的输出是

Alternatives    Q   Rank
1             0.375 3
2             0.500 5
3             0.500 6
4             0.469 4
5             0.219 2
6             NaN   NA
7             Inf   NA
8             NaN   NA
9             Inf   NA
10            0.153 1

我怎么才能解决这个问题呢?

推荐答案

使用tidyverse:

df %>% 
  mutate(Rank = ifelse(is.na(Q) | is.infinite(Q), NA, rank(Q, ties.method = "first")))

   Alternatives     Q Rank
1             1 0.375    3
2             2 0.500    5
3             3 0.500    6
4             4 0.469    4
5             5 0.219    2
6             6   NaN   NA
7             7   Inf   NA
8             8   NaN   NA
9             9   Inf   NA
10           10 0.153    1

使用基数R:

df$Rank <- ifelse(is.na(df$Q) | is.infinite(df$Q), NA, rank(df$Q, ties.method = "first"))

R相关问答推荐

使用R的序列覆盖

在R中查找每个组不同时间段的总天数

计算R中的威布尔分布的EDF

使用tidyverse / Mutate的存款账户余额

使用gcuminc,如何使用逗号格式化风险表?

如何在区分不同条件的同时可视化跨时间的连续变量?

bslib::card_header中的shine::downloadButton,图标而不是文本

使用geom_segment()对y轴排序

计算时间段的ECDF(R)

当我们有多个特殊字符时,使用gsub删除名称和代码'

找出二叉树中每个 node 在R中的深度?

根据类别合并(汇总)某些行

Geom_Hline将不会出现,而它以前出现了

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

有没有可能用shiny 的书签恢复手风琴面板?

Geom_arcbar()中出错:找不到函数";geom_arcbar";

如何在PrePlot()中将多个元素设置为斜体

有没有办法一次粘贴所有列

是否有可能从边界中找到一个点值?

从矩阵创建系数图