小编Pie*_*aix的帖子

跨多个列进行变异以创建新的变量集

我有一个国家和年份级别的面板数据集,我想根据现有变量创建两个新变量。

国家 变量1 变量2 变量3 变种4 平均值_var1 relmean_var1
1910年 德国大学 1 4 10 6 3 0.333
1911年 德国大学 2 3 11 7 1.5 1.3333
1910年 法国航空协会 5 6 8 9 3 1.66667
1911年 法国航空协会 1 4 10 9 1.5 .66667

我想做的是创建两个新的变量集:(1)每年(跨国家)平均值的变量集和(2)相对于年平均值的国家/地区值的变量集。例如,对于 var1(1) 将产生mean_var1和(2)relmean_var1,我希望这些用于所有其他变量。数据集中总共有超过 1000 个变量,但我只会将此函数应用于大约 6 个变量。

我有适用于第一部分的代码,但我想将其尽可能有效地与第二部分结合起来。

library(dplyr)
library(purrr)
df<- df%>% 
            group_by(year) %>%
            mutate_at(.funs = list(mean = ~mean(.)), .vars = c("var1", "var1", "var1", "var4"))
Run Code Online (Sandbox Code Playgroud)

此代码生成名为 var1_mean 的新变量(我更喜欢mean_var1:如何更改此名称?)

对于第二步,我尝试过:

df <- df %>%
map2_dfr(.x = d.test %>%
            select(var1, var2), …
Run Code Online (Sandbox Code Playgroud)

r nested-loops mutation dplyr purrr

11
推荐指数
1
解决办法
1万
查看次数

如何获得独家日期范围?

我想要一个对象,它为我提供从 1990-01-01 到 2021-12-31 的每个月(或季度)的日期范围,并用冒号分隔。例如,在每月的情况下,第一个对象将是 1990-01-01:1990-01-31,第二个对象将是 1990-02-01:1990-02-31,依此类推。

我遇到的问题是确保日期范围是排他的,即没有重复的日期。

start_date1 <- as.Date("1990-01-01", "%Y-%m-%d")
end_date1 <- as.Date("2021-12-01", "%Y-%m-%d")
first_date <-  format(seq(start_date1,end_date1,by="month"),"%Y-%m-%d")

start_date2 <- as.Date("1990-02-01", "%Y-%m-%d")
end_date2 <- as.Date("2022-01-01", "%Y-%m-%d")
second_date <-  format(seq(start_date2,end_date2,by="month"),"%Y-%m-%d")

date<-paste0(first_date, ":")
finaldate<-paste0(date, second_date)
Run Code Online (Sandbox Code Playgroud)

此代码有效,除了每个月的第一个日期重复“1990-01-01:1990-02-01”“1990-02-01:1990-03-01”,最后一个日期是“2021- 12-01:2022-01-01”(包括 2022 年 1 月 1 日,而不是停止于 2021 年 12 月 31 日。

如果我改为 30 天,效果就不太好,因为不是每个月都有 30 天。

获得独家日期范围的最佳方式是什么?

r date date-range

4
推荐指数
1
解决办法
405
查看次数

标签 统计

r ×2

date ×1

date-range ×1

dplyr ×1

mutation ×1

nested-loops ×1

purrr ×1