2016-12-01 101 views
0

我想申请以下条件语句:条件语句不工作

“如果系统一天是1,然后提取在DAY列包含1数据帧的行,如果它不是那么只是打印完整的数据框“。

我以为我是对的,但它只是吐出日期而不是整行。

这里是我的示例代码:

library(lubridate) 
today <- Sys.Date() 
day<-format(today, format="%d") 
day <-as.numeric(day) 
day 

[1] 1 

DATE <- as.Date(c('2016-10-31', '2016-11-01','2016-11-02','2016-11-03')) 
Revenue <- c(1000,2000,3000,4000) 
Count <- c(21000, 23400, 26800,5000) 
Price<- c(5.00, 6.00, 6.75, 2.34) 
df<-data.frame(DATE, Revenue, Count, Price) 

df 

     DATE Revenue Count Price 
1 2016-10-31 1000 21000 5.00 
2 2016-11-01 2000 23400 6.00 
3 2016-11-02 3000 26800 6.75 
4 2016-11-03 4000 5000 2.34  

df<-data.frame(DATE, Revenue, Count, Price) 
df$DAY<-day(df$DATE) 
test<-as.data.frame(df) 
test$SysDay<-day 

     DATE Revenue Count Price DAY SysDay 
1 2016-10-31 1000 21000 5.00 31  1 
2 2016-11-01 2000 23400 6.00 1  1 
3 2016-11-02 3000 26800 6.75 2  1 
4 2016-11-03 4000 5000 2.34 3  1 

我想这ifelse语句,并提取

ifelse(min(test$SysDay)==1, subset(test, DAY == 1), test) 

这是给我这样的结果行:

[[1]] 
[1] "2016-11-01"  

如果真,我想要这个结果:

 DATE Revenue Count Price DAY SysDay 
2 2016-11-01 2000 23400  6 1  1 

如果假的,我想这样的结果:

 DATE Revenue Count Price DAY SysDay 
1 2016-10-31 1000 21000 5.00 31  1 
2 2016-11-01 2000 23400 6.00 1  1 
3 2016-11-02 3000 26800 6.75 2  1 
4 2016-11-03 4000 5000 2.34 3  1 
+0

'?ifelse'返回一个与'test'形状相同的值... – Khashaa

回答

2

试试这个:

if (min(test$SysDay)==1) { subset(test, DAY == 1) } else { test } 

ifelse被强迫subset(test, DAY == 1)list,只返回第一个元素,因为min(test$SysDay)==1是一个合乎逻辑的矢量长度为1.

+0

完美,谢谢。一旦它允许我,我会在几分钟内给你这个答案的功劳! –