[英]How do I add new columns to a dataframe repeatedly in R with new names?
我有一个名为 xlong_gwTCE_3 的 dataframe
它的格式如下:
V1 study_id year mean_gwTCE index_year
1 0000001 2010 .3 2016
2 0000001 2002 .6 2016
3 0000002 2011 .2 2014
4 0000002 2005 .4 2014
5 0000002 2013 .8 2014
6 0000003 2004 .1 2017
我想重复对其执行操作并将结果存储在新列中。
这是我尝试过的,应该更清楚:
time_intervals <- seq(5,25,by=5)
for (years_back in time_intervals) {
gwTCE_cumsum <- xlong_gwTCE_3%>%
mutate(index_yr_minus_years_back = index_year-years_back) %>%
filter(year >= index_yr_minus_years_back & year <= index_year) %>%
group_by(study_id) %>%
summarize(mean_gwTCE = sum(mean_gwTCE, na.rm=T))
}
问题是我需要其他列的名称基于years_back 的数量。
例如,创建的第一列可以命名为gwTCE_cumsum_5
,创建的第二列可以命名为gwTCE_cumsum_10
。
现在它不是每次都创建额外的列或重命名它们。
我一直在尝试使用粘贴 function 尝试以这样的方式重命名列
gwTCE_cumsum <- paste("gwTCE_cumsum", years_back, sep="_")
但它一直没有工作。
我正在寻找的 output 看起来像这样:
V1 study_id year mean_gwTCE index_year gwTCE_cumsum_5 gwTCE_cumsum_10 gwTCE_cumsum_15
1 0000001 2010 .3 2016 0 .3 .9
2 0000002 2011 .2 2014 .2 .6 .6
3 0000003 2004 .1 2017 .1 .1 .1
谢谢您的帮助。
我们可以使用:=
和paste
来创建新列
for (years_back in time_intervals) {
out <- xlong_gwTCE_3%>%
mutate(index_yr_minus_years_back = index_year-years_back) %>%
filter(year >= index_yr_minus_years_back & year <= index_year) %>%
group_by(study_id) %>%
summarize(mean_gwTCE = sum(mean_gwTCE, na.rm=T)) %>%
mutate(!! str_c("gwTCE_cumsum", years_back, sep="_") := cumsum(mean_gwTCE))
}
或使用map
library(purrr)
library(dplyr)
library(stringr)
map(time_intervals, ~ xlong_gwTCE_3 %>%
filter(year >= index_year - .x, year <= index_year) %>%
group_by(study_id) %>%
summarise(index_year = index_year[1],
mean_gwTCE = sum(mean_gwTCE, na.rm = TRUE)) %>%
mutate(!!str_c("gwTCE_cumsum", .x, sep = "_") := cumsum(mean_gwTCE)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.