如何根据R中其他列的值筛选一列中的值?

如何根据R中其他列的值筛选一列中的值?,r,dataframe,sorting,filter,multiple-columns,R,Dataframe,Sorting,Filter,Multiple Columns,这是我的数据集: df <- data.frame(label = c(1,2,3,4,5), measurement = c(100.5, 84.7, 100.7, 77.9, 98.8), size = c(20, 19, 20, 20, 15)) 现在,我希望能够从具有最大大小的标签列中获取标签。但是,如上面的示例所示,其中三个标签的最大值为20。我希望我的领带断路器是测量值。所以在这种情况下,在尺寸列的三个值20中,测量值100.7是最大的 因此,我将运行代码,它将返回3,并带

这是我的数据集:

df <- data.frame(label = c(1,2,3,4,5), measurement = c(100.5, 84.7, 100.7, 77.9, 98.8), size = c(20, 19, 20, 20, 15)) 
现在,我希望能够从具有最大大小的标签列中获取标签。但是,如上面的示例所示,其中三个标签的最大值为20。我希望我的领带断路器是测量值。所以在这种情况下,在尺寸列的三个值20中,测量值100.7是最大的

因此,我将运行代码,它将返回3,并带有我应该使用的标签。如何跨列执行此操作?

您可以根据数据框的大小和度量列按降序排序,然后从中提取第一个标签

您可以根据大小和度量列按降序排列数据帧,然后从中提取第一个标签

当指定为逗号分隔参数时,dplyr中的筛选器函数将按顺序运行。您可以执行类似的操作来过滤观察结果,然后提取标签

如果平局断路器也处于平局状态,此方法将为您提供多个响应

图书馆弹琴 df%>% filtersize==maxsize,measurement==maxmeasurement%>% 标签 当指定为逗号分隔参数时,dplyr中的筛选器函数将按顺序运行。您可以执行类似的操作来过滤观察结果,然后提取标签

如果平局断路器也处于平局状态,此方法将为您提供多个响应

图书馆弹琴 df%>% filtersize==maxsize,measurement==maxmeasurement%>% 标签 在基线R中的一行中:

df[order(df$size, df$measurement, decreasing = TRUE)[1], "label"]
# [1] 3
在基线R中的一行中:

df[order(df$size, df$measurement, decreasing = TRUE)[1], "label"]
# [1] 3

在这里使用rank可能是明智的,它可以解释与order相反的重复项,order选择第一个最大值,dplyr::last选择最后一个,从而忽略其他最大值

想想这个数据框,它的值列中有重复项:

df
#   label measurement size
# 1     1       100.5   20
# 2     2        84.7   19
# 3     3       100.7   20  ## !
# 4     4        77.9   20
# 5     5        98.8   15
# 6     6       100.7   20  ## !
我们将添加值列的秩的行和,并添加平局断路器大小的秩,最后在最大值上子集级别

数据:


在这里使用rank可能是明智的,它可以解释与order相反的重复项,order选择第一个最大值,dplyr::last选择最后一个,从而忽略其他最大值

想想这个数据框,它的值列中有重复项:

df
#   label measurement size
# 1     1       100.5   20
# 2     2        84.7   19
# 3     3       100.7   20  ## !
# 4     4        77.9   20
# 5     5        98.8   15
# 6     6       100.7   20  ## !
我们将添加值列的秩的行和,并添加平局断路器大小的秩,最后在最大值上子集级别

数据:


很好,但是想想df@jay.sf很抱歉,我没有看到这个问题。这两个观察结果将是并列的?完全不是,即不会返回并列,只显示一个观察结果,其他观察结果将被忽略。试着用我的答案中的数据。意识到这一点很好,但我认为我们无法判断OP更喜欢哪种解决方案。他没有提到那个角落的案子。不错,但是想想df@jay.sf很抱歉,我没有看到这个问题。这两个观察结果将是并列的?完全不是,即不会返回并列,只显示一个观察结果,其他观察结果将被忽略。试着用我的答案中的数据。意识到这一点很好,但我认为我们无法判断OP更喜欢哪种解决方案。他没有提到那个角落的案子。不过,这并没有考虑到重复的案子。它忽略了它们,但这并没有考虑到它们的重复。它省略了它们。你想过值列中的重复吗?请参阅下面的我的。您是否考虑过值列中的重复?见下面我的文章。
rankv <- Vectorize(rank)
R <- rankv(df[-1])  ## or `apply(df[-1], 2, rank)`
r <- rowSums(R) + rank(R[,2])
df$label[r == max(r)]
# [1] 3 6
df <- structure(list(label = c(1, 2, 3, 4, 5, 6), measurement = c(100.5, 
84.7, 100.7, 77.9, 98.8, 100.7), size = c(20, 19, 20, 20, 15, 
20)), row.names = c(NA, -6L), class = "data.frame")