【发布时间】:2016-03-07 05:18:30
【问题描述】:
我对 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 个)
一个。 dlq = 1 如果价格 = NA 在周期等于 M 的一个月内或
b. dlq = 1 如果周期等于 O & 价格 = NA 并且最近一个月周期 = M 价格 = NA。
c。否则 dlq = 0。
例如,dlq = 1,其中 irm = 200907,因为 200906 中的周期 = M,价格等于 NA,并且在 irm = 200907 时它也是空的。我尝试使用超前和滞后变量,但两者之间的月数一个 M 和一个 O 不是常数。所以,我想要 dlq = 1 当且仅当 cycle = "O" 和 price = NA 在上个月的 cycle = M 时。有没有办法用 ifelse 或其他一些条件来做到这一点?任何建议/帮助将不胜感激。非常感谢。
【问题讨论】:
-
你的价格变量应该是数字,是吗?
-
是的@rawr 它应该是数字,尽管有 NA 值
-
@rawr 我刚刚编辑了这个问题,很抱歉造成混乱。我错过了一个附加条件。
-
irm当前是一个因子变量。如果您希望将其用作日期,则需要进行一些数据处理。之后,这是一个相对简单的 split-apply-combine 案例,我建议library(data.table)或library(dplyr)。 IE-编写一个适用于单个itemcode然后DT[, func(.SD), by= itemcode]的函数 -
@Alex 我不确定我理解你所说的“数据处理”是什么意思。你是说进程 irm as.date 吗?
标签: r if-statement conditional-statements