我的数据框类似于下面给出的表格。
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,在sponbrand列中有Lays。我在第5行也列出了援助品栏,我想将其设置为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)}
当我在sponbrand中没有NA的单元格时,此代码可以正常工作。但是,对于当前数据集,此代码将aidbrand中的每个单元格设置为NA,而我希望保留已存在于aidbrand列中的品牌。
答案 0 :(得分:1)
使用data.table
setDT(df)
df[!is.na(sponbrand), aidbrand := NA]
使用基础R
df[!is.na(df$sponbrand), ]$aidbrand <- NA
答案 1 :(得分:1)
这会做你想要的吗?我认为你使它变得比它需要的更复杂
#Recreate the dataset
data<-data.frame(sponbrand = as.character(c(NA, NA, NA, NA, "LAYS", NA)),
aidbrand = as.character(c("LAYS", "LAYS", NA, "LAYS", "LAYS", NA)))
data$aidbrand<-ifelse(!is.na(data$sponbrand),as.character(NA),as.character(data$aidbrand))
data
返回:
sponbrand aidbrand
1 <NA> LAYS
2 <NA> LAYS
3 <NA> <NA>
4 <NA> LAYS
5 LAYS <NA>
6 <NA> <NA>