r - 如何根据分组数据框中另一个变量中的条件从变量中返回值?
问题描述
我正在使用基本group_by()
+summarize_at
方法计算分组数据框中每个变量的一些指标。每个组代表一个小的时间序列。我想计算的一个指标是day == 1
每个组中每个变量的初始值(在本例中为 )。因此,广义问题是在分组数据帧的组内基于另一个变量中的标准返回一个变量的值。在group_by()
+summarize_at
方法中,我相信我需要一个summarize_at
可以应用于每个变量的自定义函数。我可以成功部署仅依赖于手头数据变量的其他自定义函数。我似乎对让函数去查看数据框的其他列很感兴趣。
我不赞成这种方法,并欢迎其他建议。但是,我对 dplyr 最满意。
# a dataset
df <- data.frame(day = rep(c(1:5),3),
group = c(rep(1,5),rep(2,5),rep(3,5)),
var_a = seq(1:15),
var_b = seq(2,30, length.out = 15),
var_c = seq(3,45, length.out = 15))
# the logic of what I am going for, on a manually extracted example group:
# initial value (day == 1) of var_a for group 2
df_subset <- df %>%
filter(group == 2)
df_subset$var_a[which(df_subset$day == 1)]
# [1] 6
# my laughable attempt at a function
initial <- function(x){
ini <- which(.$day == 1)
x[ini]
}
# custom function deployed in dplyr pipe (which of course doesn't work)
df %>%
group_by(group) %>%
summarize_at(c("var_a","var_b","var_c"),
list(max = max, ini = initial))
非常感谢。
解决方案
在该步骤之后,使用其中一个group_by
指定要选择的变量(这里可以正常工作),然后在 中,在每一列上应用不同的函数(这是一种为匿名调用添加前缀而不是显式指定的方法),对于第二个函数,'day' 不是所选列的一部分,但可以用不带引号的列名来选择summarise_at
select_helpers
starts_with
list
~
function(x)
library(dplyr)
df %>%
group_by(group) %>%
summarise_at(vars(starts_with('var')),
list(max = ~max(.), ini = ~ .[day == 1]))
推荐阅读
- lucene - Lucene 评分在查询方面是如何工作的?
- java - 嵌入式码头 - 503
- powershell - 将成员添加到对象的奇怪行为
- python - 不能在 gremlin_python 中使用 'is(inside())' 或 has(id,inside())
- jquery - 未捕获的 ReferenceError:使用 multiDatePicker 库时未定义 $?
- amazon-web-services - 来自另一个区域的 EC2 的 Aurora 连接
- gatsby - 使用 gatsby-source-contentful 时如何设置 GATSBY_CONTENTFUL_OFFLINE 标志
- ignite - Apache Ignite 节点无法集群 - 通信问题
- python-3.x - 文本规范化:Python 中的文本相似性。如何规范文本拼写不匹配?
- postgresql - 如何在 PostgreSQL 中获取包括今天在内的上周日?