我的需求很简单:我有一个带有分组变量的data.frame,如下所示:
library(dplyr)
proportion = 0.5; set.seed(1)
df = data.frame(id=1:6, name=c("a", "a", "b"), value=rnorm(6)) %>% arrange(name)
我想只保留每组的前半部分(按id
排序)。 (我想使用可修改的比例而不是一半,比如0.65,因为它是用于列车/测试目的的数据分割)
许多问题都会回答这个问题,但是使用固定行数(使用top_n()
,here)我不知道如何使用{{1}使其依赖于每个组的大小}。我不希望dplyr
,因为它会破坏sample_frac()
顺序。
但是,我使用自定义函数分两步找到解决方案:
id
但我可以直接使用myfunc = function(data, prop){head(data, nrow(data)*prop)}
splitted.data = split(df, df$name)
lapply(splitted.data, myfunc, prop=proportion) %>% bind_rows()
#### id name value
#### 1 1 a -0.6264538
#### 2 2 a 0.1836433
#### 3 3 b -0.8356286
执行此操作吗?感谢
答案 0 :(得分:3)
您可以使用[data-lang='it'] .product1 {
}
来获取分组df中的行数。它在n()
内无效,但在top_n
和filter
内有效:
slice
或
df %>%
group_by(name) %>%
filter(row_number() <= proportion * n())