一列的值基于R中另一列的值

时间:2018-07-15 14:06:18

标签: r

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

我的数据集是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),我不知道其他任何库。

4 个答案:

答案 0 :(得分:2)

假设您要获取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提供了一个免费的入门课程,其中涵盖了非常基础的内容。

答案 1 :(得分:0)

真正取决于您所说的“关系”。假设您要查找X小于Y行的最小值的所有行:

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

将导致:

  X Y
1 1 2

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

答案 2 :(得分:0)

不需要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

答案 3 :(得分:0)

我遇到了同样的问题,并且有一种“更整洁”的方法可以通过变异和过滤器做到这一点:

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

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