我正努力在R中编写一个if then语句。我有一个名为diel
的变量,我希望这个变量项基于变量的值为“day”或“night”叫hour
。我首先在SAS中编写代码,它看起来像这样:
length diel $5;
if 7 <= hour < 17 then diel = 'day';
if 19 <= hour <= 24 then diel = 'night';
if 0 <= hour < 5 then diel = 'night';
run;
正如你所看到的那样,黄昏(17-19)和黎明(5-7)的时间被遗漏了。这真的是我在R中遇到的问题,我无法弄清楚如何忽略黄昏和黎明。我写的时候:
dat4$diel <- ifelse ((dat4$hour)< 17, ifelse((dat4$hour) <=7,"day","night"),"night")
它标记了正确的一天中的小时,但将其他所有内容标记为夜晚。当我尝试任何其他组合时,如添加另一个ifelse语句,如果覆盖第一个语句并将所有小时标记为白天。谢谢你的任何建议!
答案 0 :(得分:3)
这样的事情可能会:
hour <- 0:24
c('night', NA, 'day', NA, 'night')[findInterval(hour, c(0,5,7,17,19,24), rightmost.closed=TRUE)]
## [1] "night" "night" "night" "night" "night" NA NA
## [8] "day" "day" "day" "day" "day" "day" "day"
## [15] "day" "day" "day" NA NA "night" "night"
## [22] "night" "night" "night" "night"
答案 1 :(得分:1)
我会这样做:
dat = data.frame(hour =0:24)
transform(dat,diel =ifelse( hour < 17 & hour >=7 , 'day',
ifelse(hour>=19 | hour <5,'night',NA)))
hour diel
1 0 night
2 1 night
3 2 night
4 3 night
5 4 night
6 5 <NA>
7 6 <NA>
8 7 day
9 8 day
10 9 day
11 10 day
12 11 day
13 12 day
14 13 day
15 14 day
16 15 day
17 16 day
18 17 <NA>
19 18 <NA>
20 19 night
21 20 night
22 21 night
23 22 night
24 23 night
25 24 night