gpt4 book ai didi

r - 如何在 R 中重新排序数据,并为数据创建新变量?

转载 作者:行者123 更新时间:2023-12-03 02:51:41 24 4
gpt4 key购买 nike

我一直在使用 CDC FluView 数据集,通过以下代码检索:

    library(cdcfluview)
library(ggplot2)
usflu <- get_flu_data("national", "ilinet", years=1998:2015)

我想做的是创建一个新的周变量,将其命名为“week_new”,以便该数据集中的 WEEK 变量被重新排序。我想通过让每年的第一周等于第 30 周来重新排序。例如,在 1998 年,我希望第 30 周对应于该年的第一周,而不是第 1 周对应于该年的第一周,并且此后的每个后续年份都具有相同的比例。我还试图创建另一个名为“季节”的新变量,它只是将每周放入相应的流感季节,例如“1998-1999”代表 1998 年到 1999 年的第 30 周,依此类推。

我相信这涉及到 for 循环和条件语句,但我不熟悉如何在 R 中使用这些。我是编程新手,同时正在学习 Java 和 R,并且只使用过循环Java 到目前为止。

这是我到目前为止所尝试过的,我认为应该是这样的:

    wk_num <- 1
for(i in nrow(usflu)){
if(week == 31){
wk_num <- 1
wk_new[i] <- wk_num
wk_num <- wk_num+1
}
if(week < 53){
season[i] <- paste(Yr[i], '-', Yr[i] +1)
}
else{
}

非常感谢任何帮助,希望我的要求是有意义的。我希望了解 future 的重新排序,因为我相信它将成为我在 R 中进行编码的重要工具。

最佳答案

这是使用 dplyrtidyr 包实现此目的的一种方法:

library(dplyr)
library(tidyr)

usflu_df <- tbl_df(usflu)

usflu_df %>%
complete(YEAR, WEEK) %>%
filter(!(YEAR == 1998 & WEEK < 30)) %>%
mutate(season = cumsum(WEEK == 30),
season_nm = paste(1997 + season, 1998 + season, sep = "-")) %>%
group_by(season) %>%
mutate(new_wk = seq_along(season)) %>%
select(YEAR, WEEK, new_wk, season, season_nm)

# YEAR WEEK new_wk season season_nm
# (int) (int) (int) (int) (chr)
# 1 1998 30 1 1 1998-1999
# 2 1998 31 2 1 1998-1999
# 3 1998 32 3 1 1998-1999
# 4 1998 33 4 1 1998-1999
# 5 1998 34 5 1 1998-1999
# 6 1998 35 6 1 1998-1999
# 7 1998 36 7 1 1998-1999
# 8 1998 37 8 1 1998-1999
# 9 1998 38 9 1 1998-1999
# 10 1998 39 10 1 1998-1999

谈论这个...

首先,使用tidyr::complete将隐式缺失值转换为显式缺失值——拉回的原始数据没有1998年的所有星期。接下来,过滤 删除 1998 年以来的无关记录,即 1998 年之前一周和第 30 周的任何记录,以使我们的生活更轻松。然后,我们通过 cumsum 和一个简单的 paste 函数创建两个新变量,seasonseason_nmseason 只要遇到 WEEK == 30 就会简单地增加——由于闰年,这很有用。然后我们 group_by season 以便我们可以 seq_along season 创建 new_wk 变量。

关于r - 如何在 R 中重新排序数据,并为数据创建新变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com