【问题标题】:value of one column based on value of another column in R一列的值基于R中另一列的值
【发布时间】:2018-07-15 14:06:17
【问题描述】:

我必须在一列中找到最小值,并根据该值在另一列中找到对应的值。

我的数据集是 K,列名是 X,Y:

> K
   X  Y
1  2  3
2  4  5
3  6  7
4  8  9
5 10 11

这些列有这些值,我找到 Y 列的最小值使用

apply(K[c(2)],2,min) # this gives me 3.

现在我必须将它与我发现困难的 X 列联系起来。

我对 R 完全陌生,我仍在学习。除了library(readr),我不知道任何其他库。

【问题讨论】:

  • 您的预期输出是什么?你想用X做什么?
  • 我希望代码将 x 值返回为 2,将 Y 值返回为 3。

标签: r


【解决方案1】:

假设你想获取X中的条目,它与Y的最小值放在同一行,你可以尝试:

# create example data.frame:
K <- data.frame(X = seq(2, 10, 2), Y = seq(3, 11, 2))

# find index of minimum entry in column Y:
idx <- match(min(K$Y), K$Y) # gives you the first entry of the minimum
idx2 <- which(min(K$Y) %in% K$Y) # gives you all indices of the minimum

# output the corresponding element (or elements) in column X:
K$X[idx]
K$X[idx2]

关于您问题的第二部分,Datacamp 提供免费的 R 入门课程,涵盖非常基础的内容。

【讨论】:

    【解决方案2】:

    不需要apply。如果您知道只有一个 Y 值是最低的,或者您需要最低 Y 的第一条记录,您可以使用which.min。否则使用min,因为它更健壮。在您的示例中,这并不重要,但是在您的完整 data.frame 上测试这两种方法,看看是否有区别。

    K[K$Y == min(K$Y), ]
      X Y
    1 2 3
    
    K[which.min(K$Y), ]
      X Y
    1 2 3
    

    【讨论】:

    • 哦。谢谢。顺便说一句,在逗号之前写什么表示。它是一个行操作,对吗?那么它是否返回对应于 Y 最小值的整行?如果我只想要另一个特定的列怎么办?
    • 请帮我理解逗号的概念。 K[K$Y == , min(K$Y) ] 我这样写,它抛出了一个错误,说“意外”,我会很感激你。
    • @PrashantKumar,K[ , ],逗号之前的确实是行操作,逗号之后的都是选择列。所以 K[K$Y == 3, ] 将返回 K$Y == 3 的所有行和所有列。在你的代码中,逗号应该在 min(...) 之后,就像我的第一行一样代码。
    【解决方案3】:

    真的取决于你所说的“相关”是什么意思。假设您要查找 X 小于 Y 行最小值的所有行:

     K[K$X<min(K$Y),]
    

    将导致:

      X Y
    1 1 2
    

    该命令是一个子集命令,它要求给出任何行的所有列,其中 X 小于 Y 整列的最小值。

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,并且有一种“更整洁”的方法可以使用 mutate 和 filter 来做到这一点:

          K %>% mutate(minY=min(Y)) %>% filter(Y=minY).
      

      如果您需要每个组的最小记录,这也可以与 group_by 一起使用。

      【讨论】:

        猜你喜欢
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多