我想过滤我的数据。下面你可以看到我的数据看起来如何。
df<-data.frame(
Description=c("15","11","12","NA","Total","NA","9","18","NA","Total"),
Value=c(158,196,NA,156,140,693,854,NA,904,925))
df
现在我想过滤并分配一些文本到一个额外的列中。所需的输出需要如下表所示。也就是说,我想引入标题为Sales
的额外列。在这个列中,使用if-else语句,我想引入两个分类值。第一个是Sold
,第二个是Unsold
。第一行到第行'Total'
需要具有值'Sold'并且在此之下的其它值需要具有Unsold
。
我试着用这个命令来做这件事,但不幸的是不是我所期望的工作。
df1$Sales <- ifelse(df$Description==c('Total'),'Sold','Unsold')
有人能帮我解决这个问题吗?
2条答案
按热度按时间qcbq4gxm1#
要分解逻辑:
dplyr::lag
检查上一个条目是否为"Total"
。设置除"Total"
以外的任何字符串的默认值可防止将NA
创建为第一个条目,因为这会将不需要的NA
带入下一步。cumsum
返回"Total"
被视为前一项的次数。1.检查
cumsum
的结果是否大于0会将步骤2转换为二进制结果:"Total"
要么已找到,要么未找到。1.如果
"Total"
已经被找到,它就没有被售出;否则就卖了。你也可以重新安排:
得到相同的结果,且真假结果的顺序相同。
pw9qyyiw2#
如果您知道
sold
和unsold
一样多,则可以使用第一个解决方案。如果你想允许每一个的奇数和未知数,你可以使用第二个解决方案。