我有一个数据集,它以某种方式类似于以下示例。我正在尝试创建一个与“预期”变量相同的变量。也就是说,如果date_time为“2020-01-02 12:00”,则创建一个变量,包括滞后、超前和date_time的水平值。
提前谢谢你。
df <- tibble(
date_time = c("2020-01-01 10:00","2020-01-01 11:00","2020-01-01 12:00","2020-01-01 13:00","2020-01-01 14:00","2020-01-02 10:00","2020-01-02 11:00","2020-01-02 12:00","2020-01-03 10:00","2020-01-03 11:00"),
date = c("2020-01-01","2020-01-01","2020-01-01","2020-01-01","2020-01-01","2020-01-02","2020-01-02","2020-01-02","2020-01-03","2020-01-03"),
x= seq.default(1,5.5,.5),
date_time_NA = c(NA,"2020-01-01 11:00",NA,NA,NA,NA,NA,"2020-01-02 12:00",NA,NA),
expected = c("2020-01-01 10:00","2020-01-01 11:00","2020-01-01 12:00",NA,NA,NA,"2020-01-02 11:00","2020-01-02 12:00","2020-01-03 10:00",NA)
)
df
我改变了上面的例子。所以我试图告诉R找到date_time_NA没有丢失的地方,然后创建一个变量,包括date_time的滞后、领先和水平值(类似于预期)。
我用@akrun分享的代码想出了一个解决方案。这可能不是一个非常聪明的解决方案;然而,我觉得它很直观。主要思想是使用ifelse来查找没有丢失date_time_NA的位置。然后我们可以再次使用row_number()并加1,这样它就可以找到领先点并扣除1,这样它就可以找到滞后位置并将它们替换为date_time的值。
df %>%
mutate(na_row = ifelse(!is.na(date_time_NA),row_number(),NA),
row_level_lag = ifelse(row_number() %in% c(na_row), date_time,NA),
row_level_now = ifelse(row_number() %in% c(na_row + 1), date_time,NA),
row_level_lead = ifelse(row_number() %in% c(na_row - 1), date_time,NA),
date_time_expected = glue("{row_level_lag} {row_level_now} {row_level_lead}"),
date_time_expected = stringr::str_replace_all(string = date_time_expected,pattern = "NA",replacement = ""))
我们可以使用< code>match来获取相关“date_time”值的索引,然后通过添加来自< code>-1:1的序列来获取上一个值和下一个值的索引。使用它创建一个子集值为“date_time”的“新”列
i1 <- match("2020-01-02 12:00", df$date_time)
i2 <- i1 + (-1:1)
df$new <- NA_character_
df$new[i2] <- df$date_time[i2]
-输出
df
# A tibble: 10 x 5
# date_time date x expected new
# <chr> <chr> <dbl> <chr> <chr>
# 1 2020-01-01 10:00 2020-01-01 1 <NA> <NA>
# 2 2020-01-01 11:00 2020-01-01 1.5 <NA> <NA>
# 3 2020-01-01 12:00 2020-01-01 2 <NA> <NA>
# 4 2020-01-01 13:00 2020-01-01 2.5 <NA> <NA>
# 5 2020-01-01 14:00 2020-01-01 3 <NA> <NA>
# 6 2020-01-02 10:00 2020-01-02 3.5 <NA> <NA>
# 7 2020-01-02 11:00 2020-01-02 4 2020-01-02 11:00 2020-01-02 11:00
# 8 2020-01-02 12:00 2020-01-02 4.5 2020-01-02 12:00 2020-01-02 12:00
# 9 2020-01-03 10:00 2020-01-03 5 2020-01-03 10:00 2020-01-03 10:00
#10 2020-01-03 11:00 2020-01-03 5.5 <NA> <NA>
使用< code>dplyr,我们可以使用< code>replace替换“date_time”中与“date_time”的< code>match索引不匹配的值,以及< code>NA的上一个和下一个索引
library(dplyr)
df %>%
mutate(new = replace(date_time,
!row_number() %in% (match("2020-01-02 12:00",
df$date_time) + (-1:1)), NA_character_ ))
-输出
# A tibble: 10 x 5
# date_time date x expected new
# <chr> <chr> <dbl> <chr> <chr>
# 1 2020-01-01 10:00 2020-01-01 1 <NA> <NA>
# 2 2020-01-01 11:00 2020-01-01 1.5 <NA> <NA>
# 3 2020-01-01 12:00 2020-01-01 2 <NA> <NA>
# 4 2020-01-01 13:00 2020-01-01 2.5 <NA> <NA>
# 5 2020-01-01 14:00 2020-01-01 3 <NA> <NA>
# 6 2020-01-02 10:00 2020-01-02 3.5 <NA> <NA>
# 7 2020-01-02 11:00 2020-01-02 4 2020-01-02 11:00 2020-01-02 11:00
# 8 2020-01-02 12:00 2020-01-02 4.5 2020-01-02 12:00 2020-01-02 12:00
# 9 2020-01-03 10:00 2020-01-03 5 2020-01-03 10:00 2020-01-03 10:00
#10 2020-01-03 11:00 2020-01-03 5.5 <NA> <NA>
如果匹配
的元素不止一个,那么我们创建一个分组列并应用相同的代码
library(tidyr)
df %>%
mutate(grp = lead(cumsum(!is.na(date_time_NA)))) %>%
fill(grp) %>%
group_by(grp) %>%
mutate(new = replace(date_time,
!row_number() %in% (match(date_time_NA[complete.cases(date_time_NA)][1],
date_time) + (-1:1)), NA_character_ )) %>%
ungroup %>%
select(-grp)
# A tibble: 10 x 6
# date_time date x date_time_NA expected new
# <chr> <chr> <dbl> <chr> <chr> <chr>
# 1 2020-01-01 10:00 2020-01-01 1 <NA> 2020-01-01 10:00 2020-01-01 10:00
# 2 2020-01-01 11:00 2020-01-01 1.5 2020-01-01 11:00 2020-01-01 11:00 2020-01-01 11:00
# 3 2020-01-01 12:00 2020-01-01 2 <NA> 2020-01-01 12:00 2020-01-01 12:00
# 4 2020-01-01 13:00 2020-01-01 2.5 <NA> <NA> <NA>
# 5 2020-01-01 14:00 2020-01-01 3 <NA> <NA> <NA>
# 6 2020-01-02 10:00 2020-01-02 3.5 <NA> <NA> <NA>
# 7 2020-01-02 11:00 2020-01-02 4 <NA> 2020-01-02 11:00 2020-01-02 11:00
# 8 2020-01-02 12:00 2020-01-02 4.5 2020-01-02 12:00 2020-01-02 12:00 2020-01-02 12:00
# 9 2020-01-03 10:00 2020-01-03 5 <NA> 2020-01-03 10:00 2020-01-03 10:00
#10 2020-01-03 11:00 2020-01-03 5.5 <NA> <NA> <NA>
问题内容: 我正在做一个自动化的查询。它需要查找最后一天晚上8点到晚上8点之间的所有交易。我当时正在考虑做这样的事情 对于自动查询,这很适合找出日期部分。但是变量的TIME部分是查询执行的当前时间。有没有一种快速简单的方法来将两个变量的时间部分硬编码为8:00 PM? 问题答案:
问题内容: 我想用Python(不是数组)中的一个创建10个变量。像这样: 我想创建的变量名,在这种情况下: ,,,…, 我不想一个数组 我有一个坐标图(640 x 480)。我正在确定像素颜色为白色的坐标。地面上有3个球,我想获取每个球的中心坐标,因此,如果要评估的坐标距离最后一个球很近,则x和y坐标将被平均(如果该坐标属于a)新球的坐标将属于新坐标组。 问题答案: 您不应该这样做,但是如果您真
当你使用了一个未知的变量名,通常 JavaScript 会自动创建全局变量: function f() { foo = 123 } f() foo 123 好在你会在 ECMAScript5 的严谨模式得到警告[1]: function f() { 'use strict'; foo = 123 } f() ReferenceError: foo is not defined 参考 [1] Jav
可能重复: Java中的动态变量名: 假设我有一个字符串,如下所示。 现在,我想创建一个字符串,但是字符串的变量将被称为“Hello”。为了使字符串名为“Hello”,我必须访问string以获取名称“Hello”,这样我就可以将其用作变量名。下面是我想看的。 感谢您的努力,请尝试向我解释,因为我是Java初学者D
问题内容: 我有一个包含300k条带有日期的记录的变量,并且该日期看起来像是该日期的 2015-02-21 12:08:51 我想删除时间 日期变量的类型是pandas.core.series.series 这是我尝试的方式 一些随机错误 在上面的代码中,textdata是我的数据集名称,而vfreceived date是一个由日期组成的变量。 如何编写代码以从datetime中删除时间。 问题答
本文向大家介绍arduino 创建变量,包括了arduino 创建变量的使用技巧和注意事项,需要的朋友参考一下 示例 要创建变量: 例如: 要创建变量并对其进行初始化: 例如: