[英]ifelse conditional formatting in r
我对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)
dlq变量取决于循环变量的值。 我想定义它,以便对itemcode的每个唯一值(我有75,000个)
一种。 如果一个周期等于M的一个月内价格= NA,则dlq = 1
湾 如果周期等于O&价格= NA,并且最近的一个月(周期= M价格= NA),则dlq = 1。
C。 否则dlq = 0。
例如,dlq = 1,其中irm = 200907,因为周期= 200906中的M,并且价格等于NA,并且在irm = 200907时也为空。我尝试使用超前和滞后变量,但是M和O不是常数。 因此,我希望dlq = 1当且仅当周期=“ O”并且价格= NA在上个月(周期= M)时才存在。是否有办法在ifelse或其他条件下做到这一点? 任何建议/帮助将不胜感激。 非常感谢。
> 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
想知道我是否误会了?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.