data<-data.frame(c(A,A,A,A,B,B,B,C,C,C),c(0.2,0.78,0.82,0,1,0.1,0.81,1,0.8,0.92,1))
我想在每组中只选择前80%(A,B)。意味着我不能使用普通的&lt;。有什么想法吗?
答案 0 :(得分:0)
使用data.table
:
library(data.table)
data <-
data.table(
"GroupID" = c("A", "A", "A", "A", "B", "B", "B", "C", "C", "C", "C"),
"Value" = c(0.2, 0.78, 0.82, 0, 1, 0.1, 0.81, 1, 0.8, 0.92, 1)
)
data[, head(Value, n = floor(nrow(.SD) * 0.8)), by = GroupID]
根据您希望将观察次数舍入为80%的方式,在floor
和ceiling
(或round
)之间进行选择。 (3个观察结果的80%是什么?2或3)
更改0.8
以控制百分比。
head
表示前80%,tail
表示最后80%。
输出:
GroupID V1
1: A 0.20
2: A 0.78
3: A 0.82
4: B 1.00
5: B 0.10
6: C 1.00
7: C 0.80
8: C 0.92
修改强>: 我刚刚意识到你的标题和正文似乎意味着两个不同的问题。
以下是标题问题的答案:
data[Value > 0.8, first(Value), by = GroupID]
输出:
GroupID V1
1: A 0.82
2: B 1.00
3: C 1.00