- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要调整一个代码,它与我的数据框完美配合(但使用另一个设置),以便从列 Day 中选择一个 2 天的时间窗口。特别是我对第 0 天之前的 1 天(即 i - 1 和 i,其中 i 是感兴趣的日期)及其包含在列 Count 中的 (i - 1) 值感兴趣必须添加到第 0 天(i ) col 计数。
这是我的数据框的示例:
df <- read.table(text = "
Station Day Count
1 33012 12448 4
2 35004 12448 4
3 35008 12448 4
4 37006 12448 4
5 21009 4835 3
6 24005 4835 3
7 27001 4835 3
8 25005 12447 3
9 29001 12447 3
10 29002 12447 3
11 29002 12446 3
12 30001 12446 3
13 31002 12446 3
14 47007 4834 2
15 49002 4834 2
16 47004 12445 1
17 51001 12449 1
18 51003 4832 1
19 52004 4836 1", header = TRUE)
Station Day Count
1 33012 12448 7
2 35004 12448 7
3 35008 12448 7
4 37006 12448 7
5 21009 4835 5
6 24005 4835 5
7 27001 4835 5
8 29002 12446 4
9 30001 12446 4
10 31002 12446 4
11 51001 12449 1
12 51003 4832 1
13 52004 4836 1
14 25005 12447 0
15 29001 12447 0
16 29002 12447 0
17 47007 4834 0
18 49002 4834 0
19 47004 12445 0
for (i in unique(df$Day)) {
temp <- df$Count[df$Day == i]
if(length(temp > 0)) {
condition1 <- df$Day == i - 1
if (any(condition1)) {
df$Count[df$Day == i] <- mean(df$Count[condition1]) + df$Count[df$Day == i]
df$Count[condition1] <- 0
}
}
}
最佳答案
以下对您提供的示例数据执行您想要的操作
for (i in unique(df$Day)) {
temp <- df$Count[df$Day == i]
if (any(temp > 0)) {
condition1 <- df$Day == i - 1
condition1[which(df$Day == i - 1) < max(which(df$Day == i))] <- FALSE
if (any(condition1)) {
df$Count[df$Day == i] <- mean(df$Count[condition1]) + df$Count[df$Day == i]
df$Count[condition1] <- 0
}
}
}
print(df[order(df$Count, decreasing = TRUE),])
## Station Day Count
##1 33012 12448 7
##2 35004 12448 7
##3 35008 12448 7
##4 37006 12448 7
##5 21009 4835 5
##6 24005 4835 5
##7 27001 4835 5
##11 29002 12446 4
##12 30001 12446 4
##13 31002 12446 4
##17 51001 12449 1
##18 51003 4832 1
##19 52004 4836 1
##8 25005 12447 0
##9 29001 12447 0
##10 29002 12447 0
##14 47007 4834 0
##15 49002 4834 0
##16 47004 12445 0
Day
中的值。列作为时间顺序。因此,对于
df$Day = 12449
没有前一天需要考虑,因为所有行都带有
df$Day = 12448
在它之前。结果,
Count
为
df$Day = 12449
保持在
1
,更重要的是,
Counts
对于所有具有
df$Day = 12448
的行处理后不归零
df$Day = 12449
.
condition1
所以我们设置为
FALSE
df$Day == i - 1
的所有行(前一天)在
df$Day == i
的最高行之前(感兴趣的日子)使用该行
condition1[which(df$Day == i - 1) < max(which(df$Day == i))] <- FALSE
Day
的值相同数据框中的列与示例数据中的行块一样集中在一起。否则,您的
for
循环
unique(df$Day)
需要完全重新考虑并替换为行上的循环,以便跟踪数据框中感兴趣的日期的当前行。
if(length(temp > 0)) {
Count
大于
0
对于感兴趣的日子。然而,R 中的条件运算符被向量化,使得
temp > 0
返回与输入长度相同的 bool 值向量
temp
.因此,
length(temp > 0)
除非
temp
,否则将始终返回正数本身的长度
0
(即,空)。为了达到您的目的,该行更改为
if(any(temp > 0)) {
if (any(temp > 0)) {...}
中。阻塞到一个函数中,调用它
accumulate.mean.count
,并使用
sapply
将此函数应用于前几天的集合.修改内容为:
accumulate.mean.count <- function(this.day, lag) {
condition1 <- df$Day == this.day - lag
condition1[which(df$Day == this.day - lag) < max(which(df$Day == this.day))] <- FALSE
if (any(condition1)) {
df$Count[df$Day == this.day] <<- mean(df$Count[condition1]) + df$Count[df$Day == this.day]
df$Count[condition1] <<- 0
}
}
lags <- seq_len(30)
for (i in unique(df$Day)) {
temp <- df$Count[df$Day == i]
if (any(temp > 0)) {
sapply(lags, accumulate.mean.count, this.day=i)
}
}
print(df[order(df$Count, decreasing = TRUE),])
lag
是当天(即滞后)之前的天数。一个 lag = 1
表示前一天,以及 lag = 2
表示前两天,以此类推 lags
是这些的集合。在这里,lags <- seq_len(30)
是来自 1
的序列至 30
在哪个accumulate.mean.count
已应用,这就是您想要的。见 this有关 *apply
的出色概述R 函数族。请注意 lags
不一定是一个序列,而只是一个整数的集合,例如 c(1, 5, 10)
前一天、前 5 天和前 10 天。如果您想在 future 几天滚动,它甚至不必为正,但不应为零。 df$Count
,这是一个超出 accumulate.mean.count
范围的变量, 在函数内 accumulate.mean.count
需要 <<-
而不是 <-
.见 this解释并注意使用 <<-
的危险那里提到。 lags <- seq_len(30)
, 但对于
seq_len(1)
,我恢复了原来的结果,对于
seq_len(2)
, 我有
## Station Day Count
##1 33012 12448 10
##2 35004 12448 10
##3 35008 12448 10
##4 37006 12448 10
##5 21009 4835 5
##6 24005 4835 5
##7 27001 4835 5
##16 47004 12445 1
##17 51001 12449 1
##18 51003 4832 1
##19 52004 4836 1
##8 25005 12447 0
##9 29001 12447 0
##10 29002 12447 0
##11 29002 12446 0
##12 30001 12446 0
##13 31002 12446 0
##14 47007 4834 0
##15 49002 4834 0
关于r - For 循环 - 从日列中选择时间窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38394092/
我正在使用 C#。 我知道我可以用 ToLongDateString() 显示如下内容: Friday, February 27, 2009 我喜欢做的是展示类似的东西: Febru
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
我需要检查是否 DateTime.Now是在每个月的前 3 个工作日(周一至周五)。我还需要提供一个 List有国定假日,应相应处理。 如果 DateTime.Now 是星期六并且是该月的 1 号,则
我想以 2012 年 1 月 1 日 - 2012 年 1 月 31 日的格式显示日期 并获取由 dateranges['jan 1,2012 - jan 31,2012','December 1,2
我有这两个函数可以以正确的格式 (mm-dd-yyyy) 创建一个新字符串,但现在它似乎工作得不太好......当我输入日期 31-03-2013 这是一个有效的日期,它出现在 04-01-2013
我只想在 Fullcalendar 中加载 December 月份,其中 2 个日期启用 2012 年 12 月 14 日、15 日。 var date = new Date(2012, 11); v
我创建了一个convertDate类,用于转换我的时间戳,即Date().sinceReferenceDate(即自2001年1月1日凌晨12:00起)。我有一个问题:当时间戳的日期超过 3 周前时,
我有来自两个来源的数据,我试图在日期/时间上进行匹配。问题是我没有得到匹配。所以我将日期/时间转换为 Julian 并遇到了一些奇怪的事情。 8/11/2015 6:50:22.000 42227
我正在尝试将毫秒转换为如下所示的日期:Oct 04, 2013 .我将毫秒转换为日期对象: var d1 = new Date(milliseconds); 然后输出如下内容: Fri Oct 04
我正在尝试使用 javascript 进行倒计时。但是,我的倒计时只能计算天数、小时数、分钟数和秒数。我还想显示年份和月份。 以下是我的代码: today = new Date();
我有下面的查询不适合我, 这个函数 from_tz(to_timestamp(START_TIME, 'YYYYMMDDHH24MISS'), substr(UTC_TIME_CODE_OFFSET,
例如,我有一列数据如下: 17.14.11 17.15.10 18.21.06 现在是 2017 年 11 月 14 日,我想将其更改为 DateTime 对象,例如: 2017-11-14 2017
$date1 = "2000-01-01"; $date2 = "2011-03-14"; $diff = abs(strtotime($date2) - strtotime($date1)); $y
我有以下代码来验证给定日期格式的日期: val df = new SimpleDateFormat("MM/dd/yyyy"); df.setLenient(false); try { val
我有一个包含两个 DateTime 成员的类。 但是,当我尝试将表示日期的“人类可读”值分配给 DateTime 成员时,它拒绝它并显示消息“字符串未被识别为有效的 DateTime”。 失败的代码行
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
这个问题已经有答案了: Adding days to a date in Java [duplicate] (6 个回答) 已关闭 6 年前。 如何在 java 中将给定的日期转换为日历格式。 示例初
这个问题已经有答案了: Illegal pattern character 'T' when parsing a date string to java.util.Date (4 个回答) 已关闭 6
我现在在香港。如何获取美国的年、月、日? 我已经尝试过: Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new
我正在尝试使用 php 和 Mysql 开发一个搜索系统,但是您如何搜索:例如当数据库中的日期格式为 2012-03-26(年/月/日)时的三月份 最佳答案 根据列数据的格式,这样的事情可能会起作用:
我是一名优秀的程序员,十分优秀!