我有一个数据框,就像我在下面简化的那样。我想首先基于X列选择具有相同值的行,然后在该选择中基于Y列选择具有相同值的行。然后从该选择中选择最小值。我现在使用的是forloop,但似乎必须有一种更简单的方法。谢谢!
set.seed(123)
data<-data.frame(X=rep(letters[1:3], each=8),Y=rep(c(1,2)),Z=sample(1:100, 12))
data
X Y Z
1 a 1 76
2 a 1 22
3 a 2 32
4 a 2 23
5 b 1 14
6 b 1 40
7 b 2 39
8 b 2 35
9 c 1 15
10 c 1 13
11 c 2 21
12 c 2 42
期望的结果:
X Y Z
2 a 1 22
4 a 2 23
5 b 1 14
8 b 2 35
10 c 1 13
11 c 2 21
这是一个data.table
解决方案:
library(data.table)
data = data.table(data)
data[, min(Z), by=c("X", "Y")]
根据OP的评论进行编辑:
如果我们排序的一列中有NA值,则会创建另一行:
data[2,2] <-NA
data[, min(Z,na.rm = T), by=c("X", "Y")]
X Y V1
1: a 1 31
2: a NA 79
3: a 2 14
4: b 1 31
5: b 2 14
6: c 1 50
7: c 2 25
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句