r中的ifelse条件格式

r中的ifelse条件格式,r,if-statement,conditional-statements,R,If Statement,Conditional Statements,我对R比较陌生。我有一个数据框,我想在其中创建一个执行条件格式设置的变量。下面是我正在处理的数据示例 cycle <- c("M", "O", "O", "O", "O", "M", "O") irm <- c("200901", "200902", "200903", "20

我对R比较陌生。我有一个数据框,我想在其中创建一个执行条件格式设置的变量。下面是我正在处理的数据示例

cycle <- c("M", "O", "O", "O", "O", "M", "O")
irm <- c("200901", "200902", "200903", "200904", "200905", "200906", "200907")
itemcode <- c("611420B004A01", "611420B004A01", "611420B004A01", "611420B004A01", "611420B004A01", "611420B004A01", "611420B004A01")
price <- c(19.00, NA, NA, NA, NA, NA, NA)
dlq <- c(0, 0, 0, 0, 0, 1, 1)
df <- data.frame(itemcode, irm, price, cycle, dlq)
cycle
>df$dlq[is.na(df$price)&df$cycle==“M”]df$dlq[is.na(df$price)&df$cycle==“O”&
is.na(c(na,head(df$price,-1))&#最后两个条件使用移位值
c(假,头部(df$周期,-1)=“M”)]df
循环irm项目代码价格dlq
1 M 200901 61142B004A01 19 0
2 O 200902 61142B004A01 NA 0
3 O 200903 61142B004A01 NA 0
4 O 200904 61142B004A01 NA 0
5 O 200905 61142B004A01 NA 0
6 M 200906 61142B004A01 NA 1
7 O 200907 61142B004A01 NA 1

不知我是否误解了?

您的价格变量应该是数字,是吗?是@rawr它应该是数字,NA值notwithstanding@rawr我刚刚编辑了这个问题,很抱歉搞混了。我还遗漏了一个附加条件。
irm
当前是一个因子变量。如果您希望将其用作日期,则需要执行一些数据搜索。在这之后,这是一个相对简单的split-apply-combine案例,我建议使用
library(data.table)
library(dplyr)
。IE-编写一个函数,用于单个
itemcode
然后
DT[,func(.SD),by=itemcode]
@Alex我不确定我是否理解你所说的“数据搜索”是什么意思。您的意思是将irm作为.date处理吗?这很好,但在条件b下似乎不起作用。我不太清楚为什么它在这个示例中工作,而不是在我的完整数据帧中工作。也许是因为它不使用irm作为日期?嗯,
irm
不是日期或类似于日期的任何东西。这是一个字符向量。对不起,这是一个约会。你认为那会有帮助吗?我不知道。由于问题的初始版本将其作为一个字符,并且它似乎依赖于一个简单的行序列,因此没有检查与日期相关的问题。如果您的记录中存在漏洞,那么它将更加复杂,您需要定义将出现的所有问题。谢谢,但这不起作用。对于irm=200907,dlq应为1。这可能是因为irm没有用作日期,但我还不确定。
> df$dlq[ is.na(df$price)&df$cycle=="M" ] <- 1
> df$dlq[ is.na(df$price) & df$cycle=="O" & 
          is.na( c(NA, head(df$price,-1))) & # The last two conditions use shifted values
          c(FALSE, head(df$cycle,-1)=="M")  ] <- 1
> df
  cycle    irm      itemcode price dlq
1     M 200901 611420B004A01    19   0
2     O 200902 611420B004A01    NA   0
3     O 200903 611420B004A01    NA   0
4     O 200904 611420B004A01    NA   0
5     O 200905 611420B004A01    NA   0
6     M 200906 611420B004A01    NA   1
7     O 200907 611420B004A01    NA   1
> library('plyr');library('dplyr')
> df %>% tbl_df %>% mutate(dlq=ifelse((cycle=='M' & is.na(price))|((cycle=='O' & is.na(price)) & (cycle[nrow(.)]=='M' & is.na(price[nrow(.)]))),1,0))
Source: local data frame [7 x 5]

       itemcode    irm price  cycle   dlq
         (fctr) (fctr) (dbl) (fctr) (dbl)
1 611420B004A01 200901    19      M     0
2 611420B004A01 200902    NA      O     0
3 611420B004A01 200903    NA      O     0
4 611420B004A01 200904    NA      O     0
5 611420B004A01 200905    NA      O     0
6 611420B004A01 200906    NA      M     1
7 611420B004A01 200907    NA      O     0