r - 在 R 中使用嵌套循环计算一系列唯一 ID 和天数的最小值和最大值
问题描述
我正在尝试循环并返回一系列唯一 ID 在几天内的最小值和最大值计算。我尝试遍历天数,然后遍历天数的每个唯一值,但它并没有完全按照我的意愿去做,我得到了一个“4 列表”,其中包含 ID 的所有迭代,但其他所有的迭代都是 NA。
days<-c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)
id<-c(1.1,1.1,1.2,1.2,1.1,1.2,1.2,1.1,1.2,1.2,1.2,1.1,1.1,1.1,1.1)
a<-c(1,3,1,5,1,5,2,3,1,5,2,1,4,5,3)
df=data.frame(days,id,a)
newdf<-NULL
daylist<-unique(df$days)
idlist<-unique(df$id)
for (d in daylist) {
for (i in idlist) {
minvalue<-min(df$a)
maxvalue<-max(df$a)
newdf$minValue[i]<-minvalue
newdf$maxValue[i]<-maxvalue
newdf$day<-d
newdf$ID<-i
}
}
我希望输出数据帧的每一行都包含每天的 ID、日期、最大值和最小值。
谢谢!
解决方案
您可以使用dplyr
和group_by
。R 中的 for 循环非常慢。
> library("dplyr")
> df %>% group_by(days, id) %>% summarise(minvalue = min(a), maxvalue = max(a))
days id minvalue maxvalue
<dbl> <dbl> <dbl> <dbl>
1 1.00 1.10 1.00 3.00
2 1.00 1.20 1.00 1.00
3 2.00 1.10 1.00 1.00
4 2.00 1.20 5.00 5.00
5 3.00 1.10 3.00 3.00
6 3.00 1.20 1.00 2.00
7 4.00 1.10 1.00 1.00
8 4.00 1.20 2.00 5.00
9 5.00 1.10 3.00 5.00
推荐阅读
- html - 表 td 元素包装在错误的列下
- selenium - 仅在使用 Windows 启动应用程序时使用 .AddExtensions
- google-apps-script - 在写入 Google 表格之前从输出中删除“未定义”
- javascript - 指纹js2中同一台机器上的不同指纹
- linq - 使用 linq/lambda 在 2 个数据表之间更新
- f# - 是否可以定义一个将多个函数应用于单个参数的 F# 运算符(几乎与 ||> 运算符相反)?
- scala - Spark scala数据框:将多列合并为单列
- node.js - ioredis 未处理的错误事件:错误:连接 ETIMEDOUT
- unit-testing - ABAP 相等性检查对于 INT4 和 CHAR 数字是错误的
- r - 在 CMD 中安装 R 脚本包时出错