r - Dataframe的滚动列减法
问题描述
我有一个像这样的数据框:
library(lubridate)
set.seed(23)
date_list = seq(ymd('2000-01-15'),ymd('2010-09-18'),by='day')
testframe = data.frame(Date = date_list)
testframe$Day = substr(testframe$Date, start = 6, stop = 10)
testframe$ABC = rnorm(3900)
testframe$DEF = rnorm(3900)
testframe$GHI = seq(from = 10, to = 25, length.out = 3900)
testframe$JKL = seq(from = 5, to = 45, length.out = 3900)
我想要这个数据框的自动滚动子集,应该是这样的:
testframe_ABC = testframe[,c("Date","Day","ABC")]
testframe_DEF = testframe[,c("Date","Day","DEF")]
testframe_GHI = testframe[,c("Date","Day","GHI")]
testframe_JKL = testframe[,c("Date","Day","JKL")]
日期和日期列应始终保留,其他列应单独添加。应将变化列的名称添加到数据框名称中,以获得新的 df。如果可能,所有数据框也可以在数据框列表中。
任何想法如何做到这一点?
解决方案
我假设您想要一个包含 4 个数据框的列表,其组件为ABC
、DEF
等。最好将它们放在一个列表中:
L <- Map(function(nm) testframe[c("Date", "Day", nm)], names(testframe)[-(1:2)])
在这种情况下L$ABC
orL[[1]]
将引用ABC
数据框,但如果您想让它们在全局环境中悬空,这会将列表组件复制到其中:
list2env(L, .GlobalEnv)
我不会rolling
在这种情况下使用这个词。通常,该术语指的是一个滑动窗口,例如:
library(zoo)
rollmeanr(1:10, 3) # 2 is mean of 1:3, 3 is mean of 2:4, etc.
## [1] 2 3 4 5 6 7 8 9
推荐阅读
- ios - Xcode UI 测试未能在 CI 中构建并出现错误“无法计算签名任务输入”
- flutter - Flutter Web - 如何在 SingleChildScrollView -> Column 中使用 TabBarView?
- amazon-web-services - 多个文件同时上传到s3,只能1个实例启动运行任务
- spss - 根据spss中的前几个字符选择值范围?
- gcc - 如何为jetson nano(arm64)构建gcc 11交叉编译器
- binomial-heap - 二项式最小堆删除问题
- r - 在 RI 中有一个表示行索引值的列表,我如何返回这两个列表元素之间的行?
- python - 尝试通过 Elastic Beanstalk 部署 Django 应用程序,找不到模块错误
- r - 如何使用 purr::map 传递具有多个参数的多个函数?
- azure-devops - 使用旧环境变量的 Azure Devops 自托管代理