【问题标题】:Conditional Statement Not Working条件语句不起作用
【发布时间】:2016-12-01 15:33:49
【问题描述】:

我想应用以下条件语句:

“如果系统日期为 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

【问题讨论】:

  • ?ifelse 返回一个与test 形状相同的值...

标签: r if-statement conditional lubridate


【解决方案1】:

试试这个:

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

ifelsesubset(test, DAY == 1 ) 强制转换为 list 并且只返回第一个元素,因为 min(test$SysDay)==1 是长度为 1 的逻辑向量。

【讨论】:

  • 完美,谢谢。一旦允许我这样做,我会在几分钟内给你这个答案的功劳!
猜你喜欢
  • 2011-01-08
  • 2011-12-04
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多