r - R:循环在 R 中创建新的数据帧
问题描述
我正在尝试创建一个循环,为 VCS 站创建许多文件,这些文件根据其站名命名。下面是为一个站执行此操作的代码,我试图将其变成一个循环,以便可以为 68 个站执行此操作。(即,如果我正在复制和粘贴,我将用不同的电台名称替换 P205187,例如 P205200)。我在一个名为 VCS.Sites 的数据框中有单独的电台名称(例如 P205187)。谁能指出我正确的方向?新的 R 用户在这里,我被困住了!
P205187 <- VCSrawdata[VCSrawdata$Network_ID=="P205187",] #create a file for VCS station P205187
#clean up after subset
P205187$Network_ID <- factor(P205187$Network_ID)
# create annual file for VCS station P205187
P205187_annual <- group_by(P205187,Year,DESCRIPTION)
P205187_annual <- summarise(P205187_annual,Sum_Annual = sum(Value), Mean_Annual = mean(Value), CountDays=n())
# create monthly file for VCS station P205187
P205187_monthly <- group_by(P205187,Year, Month,DESCRIPTION)
P205187_monthly <- summarise(P205187_monthly,Sum_Monthly = sum(Value),Mean_monthly = mean(Value),CountDays=n())
解决方案
只需在定义的方法中概括您的过程,然后将站点名称作为参数传递给循环或应用函数来迭代站点。使用这种方法,您可以避免许多单独的对象淹没全局环境,而是使用许多底层元素的单个命名列表来更好地序列化和组织。
summarize_stations <- function(station_name) {
tmp_df <- VCSrawdata[VCSrawdata$Network_ID==station_name,]
tmp_df$Network_ID <- factor(tmp_df$Network_ID)
# create annual file for VCS station
tmp_annual <- summarise(group_by(tmp,Year,DESCRIPTION),
Sum_Annual = sum(Value),
Mean_Annual = mean(Value),
CountDays=n())
# create monthly file for VCS station
tmp_monthly <- summarise(group_by(tmp, Year, Month,DESCRIPTION),
Sum_Annual = sum(Value),
Mean_Annual = mean(Value),
CountDays=n())
# RETURN NAMED LIST OF BOTH AGGREGATIONS
return(list(annual=tmp_annual, monthly=tmp_monthly))
}
station_list <- sapply(VCS.Sites$station_names, summarize_stations, simplify=FALSE)
# ACCESS UNDERLYING ELEMENTS
station_list$P205187$annual
station_list$P205187$monthly
...
您甚至可以使用by
(object-oriented wrapper to tapply
) 子集VCSrawdata
by Network_ID
(假设它包括所有您需要的站点)。为此,请稍微调整函数以接收数据帧作为允许您跳过子集行的参数。
summarize_stations <- function(tmp_df) {
# REMOVE SUBSET LINE
# tmp_df <- VCSrawdata[VCSrawdata$Network_ID=="P205187",]
...keep same code as above
}
station_list <- by(VCSrawdata, VCSrawdata$Network_ID, FUN=summarize_stations)
# ACCESS UNDERLYING ELEMENTS
station_list$P205187$annual
station_list$P205187$monthly
...
推荐阅读
- centos - 坚持配置清漆
- bootstrap-4 - Bootstrap:不需要的手风琴行为
- git - 尝试将我的文件从 git 推送到 github 时出现错误,并发生此错误
- javascript - 如何使用外部 div 元素的 Onclick 事件
- go - 无论我是否关闭频道,地图缩小都不起作用
- c# - Linq 在同一个表中具有 case 条件,并在 where 条件下从其他表中计数
- mongodb - 无法对 Kubernetes 上的 mongodb 隐藏成员进行身份验证,“身份验证失败。”
- json - 如何迭代嵌套的 json 数组并根据条件更新节点的属性?
- opengl - GPU 射线投射(单程),在球坐标中具有 3d 纹理
- mongodb - robo 3t - 对阵列的聚合查询失败