我有一个类似于下表给出的数据框。根据R中另一列中的值重置单元格值
sponbrand aidbrand
1 <NA> LAYS
2 <NA> LAYS
3 <NA> <NA>
4 <NA> LAYS
5 LAYS LAYS
6 <NA> <NA>
可再现的格式如下:
structure(list(sponbrand = c(NA, NA, NA, NA, "LAYS", NA), aidbrand = c("LAYS",
"LAYS", NA, "LAYS", "LAYS", NA)), .Names = c("sponbrand",
"aidbrand"), row.names = c(NA, 6L), class = "data.frame")
我想设置如下:
如果我有一个全新的sponbrand我想设置在aidbrand相应的行作为NA。在上面的例子中,行号5在列标记中放置了它。我在第5行中也列出了aidbrand专栏,我希望将其设置为NA,同时保留援助品牌中的其他品牌。所需的输出如下:
sponbrand aidbrand
1 <NA> LAYS
2 <NA> LAYS
3 <NA> <NA>
4 <NA> LAYS
5 LAYS NA ---->> This is the row I want to reset, while retaining the rest.
6 <NA> <NA>
我用下面的代码:CC是我DF:
if("aidbrand" %in% colnames(cc)){cc$aidbrand <- ifelse(cc$sponbrand == "LAYERR", NA, cc$aidbrand)}
此代码工作完全当我有细胞无NA在sponbrand。然而,对于当前数据集,此代码将aidbrand中的每个单元格设置为NA,而我希望保留aidbrand列中已存在的品牌。
'如果( “aidbrand” %的%colnames(CC)){$ CC aidbrand < - ifelse (cc $ sponbrand ==“LAYS”&!is.na(cc $ sponbrand),NA,cc $ aidbrand)}'在ifelse中添加另一个条件检查。由于NA == ...返回NA,并且IFelse(NA,...,...)也返回NA。然而,'NA&FALSE'返回FALSE – Psidom