R_Language 板


LINE

[问题类型]: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来) [软体熟悉度]: 入门(写过其他程式,只是对语法不熟悉) [问题叙述]: 这笔资料为2010年全球的降雨资料,资料可从这里取得:http://0rz.tw/JI056,资料的时 间格式为24小时一笔,总共365笔,现在我想先把时间的格式转成年月日(如:2010-01-01) ,再判断日期的月份来做计算(回圈),之前有大大解答我是用apply的做法,我也知道在 R里用apply会比用回圈来的有效率,不过我想用自己理解的逻辑来写回圈做练习,而下面 我所写的回圈我知道其中一个问题是time1的维度还是365(虽然数字变成1~12),我不知道 该怎麽把time1(按月份分好的365天)放到一个12格的矩阵里,所以想请教各位大大下面的 回圈该如何修改才正确呢??谢谢。 [程式范例]: rm(list=ls()) library(ncdf4) library(data.table) TRMM_data <- "C:\\Users\\TOM\\Desktop\\R(资料库)\\TRMM资料\\trmm_2010.nc" obs <- nc_open(TRMM_data) print(obs) lon <- ncvar_get(obs,"lon") lat <- ncvar_get(obs,"lat") time <- ncvar_get(obs,"time") precip <- ncvar_get(obs,"r") nc_close(obs) for(tmonth in c(1:12)){ for(time1 in c(1:365)){ time <- as.Date(time / 24, format = "%Y-%m-%d", origin = "2010-01-01") time1 <- strftime(time,format="%Y-%m-%d) tmonth <- month(time1) if(tmonth==time1){ precip1 <- precip[,,tmonth] precip2 <- array(NA_real_,dim=c(1440,400,12)) for(i in c(1:1440)){ for(j in c(1:400)){ precip2[i,j,1:12] <- mean(precip1[i,j,tmonth]) } } } } } library(sp) library(RColorBrewer) image(lon,lat,precip2[,,1],col=rev(brewer.pal(10,"RdBu"))) [环境叙述]: [关键字]: 时间处理 回圈 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.122.136.30
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1542102427.A.E65.html
1F:→ andrew43: 我觉得你的问题是你没想清楚要怎麽算,而不是R的问题。11/13 19:28
2F:→ andrew43: 要从365层分组平均成12层,你想要回圈怎麽「走」?11/13 19:32
3F:→ andrew43: 另你在判断「某一天属於哪一月」就真的不知所云...11/13 19:36
4F:→ andrew43: a<-1:5; b<-c("A","A","B","B","B"); 先练好把a按b分组11/13 19:40
5F:→ andrew43: 平均得到c(1.5,4)结果且不要用apply系列的写法11/13 19:41
6F:→ AndrewShi: 我想让365天按照日期让R来判断这是几月的资料,是一月11/13 19:45
7F:→ AndrewShi: 就加总前31天的资料,是二月的就加总第32~59天的资料,11/13 19:45
8F:→ AndrewShi: 最後加总成总共12个月。11/13 19:45
9F:→ AndrewShi: 好的,我先试试看。11/13 19:45
10F:→ andrew43: 你的算法很不方便,还要额外处理某个月是当年的第几天11/13 20:37
11F:→ andrew43: 当然这有额外的function可以处理。11/13 20:38
12F:→ andrew43: 此外,如此一来,不应该会有四层for loop。11/13 20:38
13F:→ andrew43: 我猜你把我的小问题做出来,你也就自然解决了。11/13 20:41
14F:→ AndrewShi: andrew大可以给我一点提示吗??我目前只想到,names(a)11/14 01:51
15F:→ AndrewShi: <- b,我不确定这是不是把a按b分组的意思。11/14 01:51
16F:→ andrew43: https://ideone.com/PFtOBA 参考看看11/14 08:50
17F:→ AndrewShi: andrew大~你给我的这段程式码是把365天按照2018年的月11/14 12:34
18F:→ AndrewShi: 份和日数去分组,最後再从1+2+3+...365除上每个月的天11/14 12:34
19F:→ AndrewShi: 数的意思吗?!11/14 12:34
抱歉,我可能没有把想做的事说清楚,我的确是也想把天数和月份做连结,但上面的程式 码我是想让它当time1=1,time=1进来回圈之後,判断是几月份的降雨值,如果判断是1月 ,那麽就会等於time1的1,然後就会把判断为1月份的降雨值做相加。 当time=32的时候,它会判断为2月(的降雨值),此时time=32就不会等於time1的1,所以 第31个值後面所有的值就都不符合if判断式,最後跳到time1=2,time=1继续跑,time=32 才会开始符合条件,之後便是相加2月的降雨值,以此类推,最後再把365天的降雨值放到 12格的盒子里。 ※ 编辑: AndrewShi (110.50.156.45), 11/14/2018 12:50:45
20F:→ andrew43: 对,我是这样算。 11/14 14:08
21F:→ andrew43: 你的方法也可以,但你的code我看不出来是在做这件事。 11/14 14:10
22F:→ andrew43: 先不要把for loop变动变数和原本存在的变数有一样的名字 11/14 14:33
※ 编辑: AndrewShi (110.50.156.45), 11/14/2018 15:44:44 ※ 编辑: AndrewShi (110.50.156.45), 11/14/2018 15:45:44
23F:→ AndrewShi: andrew大~我稍微改了一下上面的程式码,但还是不行, 11/14 15:52
24F:→ AndrewShi: 我也觉得还是怪怪的,但不知道该怎麽改,tmonth有365 11/14 15:52
25F:→ AndrewShi: 个数字(1~12),我不知道该怎麽把都是1的那31天的降雨 11/14 15:53
26F:→ AndrewShi: 值放入同一格里。 11/14 15:53
27F:→ AndrewShi: https://i.imgur.com/MQFzcpY.jpg 11/14 15:54
28F:→ andrew43: tmonth <- month(time1) 和 for loop的tmonth打架 11/14 16:59
29F:→ andrew43: 泼你个冷水,你坚持四层loop的运算量实在很浪费力气 11/14 17:03
30F:→ andrew43: 另外,建议先退回到我给的例子,用你自己的方法重新写。 11/14 17:05
31F:→ andrew43: 在重写之前先用纸笔把program flow chart画出来再写 11/14 17:05
32F:→ andrew43: flow chart中要尽可能包括所有细节 11/14 17:06
33F:→ AndrewShi: andrew大~打架是指??我的最後2个回圈是在做降雨值的加 11/14 23:42
34F:→ AndrewShi: 总,能否请教andrew大我的回圈有缺或错哪些地方吗??如 11/14 23:43
35F:→ AndrewShi: 果没有错的很离谱,我想看自己能不能修改并完成它(毕 11/14 23:43
36F:→ AndrewShi: 竟是用自己的逻辑写的),至於你给我的那段程式码,我也 11/14 23:43
37F:→ AndrewShi: 只是勉强看的懂,但我还真的不知道也想不到要那样写。 11/14 23:43
38F:→ rubythinking: 对於tmonth你一开始的设定是c(1:12),结果到回圈里 11/15 00:03
39F:→ rubythinking: 面你又让他跟着你的time1做变化,这样第一个回圈是 11/15 00:03
40F:→ rubythinking: 不是可以去掉? 11/15 00:03
41F:→ rubythinking: 其实就连你的time1都是会变动的,所以前两个for回圈 11/15 00:05
42F:→ rubythinking: 根本是没意义的吧? 11/15 00:05
43F:→ andrew43: 因为你的code有很多诡异之处,我不能明白你的困难点在哪 11/15 00:57
44F:→ andrew43: 所以我才建议你先简化问题,先用例子中已知部份重写一次 11/15 00:59
45F:→ andrew43: 看看能不能让我或你自觉你的关键问题是什麽。 11/15 01:00
46F:→ andrew43: 至於你说你也会想不到原来可以有不同写法,这很正常的。 11/15 01:01
47F:→ andrew43: 不用太在意,先看懂别人的code逻辑是什麽就好。 11/15 01:02
48F:→ AndrewShi: 好的,那我明天再来好好的想,谢谢andrew大。 11/15 01:45
49F:→ andrew43: 先给你模仿你想法的一种解法。卡关时再开来看。 11/15 17:46
50F:→ andrew43: https://ideone.com/kFZTlu 留意一些for loop小技巧 11/15 17:47
51F:→ andrew43: 例如 var.N 就是常见的计数器写法。 11/15 17:48
52F:→ AndrewShi: 了解,非常谢谢andrew大,我的想法的确是你後面传给我 11/22 12:31
53F:→ AndrewShi: 的这个写法,再看了你的程式码之後我有想出来要怎麽写 11/22 12:31
54F:→ AndrewShi: 了。 11/22 12:31
55F:→ AndrewShi: andrew大~想请问你确认一下这个回圈概念套用在两年或是 11/22 17:15
56F:→ AndrewShi: 多年的资料上应该也可以吧?!就是算两年(或多年)一月份 11/22 17:15
57F:→ AndrewShi: 的平均降雨值 11/22 17:15
58F:推 andrew43: 可以。分群平均时的组别有包含年和月就没问题。 11/22 20:59







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP