我必须在一列中找到值最小值,并且基于该值,我必须找到另一列中对应的值。
我的数据集是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
中与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介绍课程,涵盖了非常基础。
不需要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
真的取决于你所说的“关联”。假设您要查找X小于Y行最小值的所有行:
K[K$X<min(K$Y),]
将导致:
X Y
1 1 2
该命令是一个子集命令,它要求给出任何行的所有列,其中X小于整个Y列的最小值。
我遇到了同样的问题,并且使用mutate和filter有一个“更整洁”的方法:
K %>% mutate(minY=min(Y)) %>% filter(Y=minY).
如果您需要每个组的最小记录,这也可以与group_by一起使用。