我有一个数据集
df1 <- data.frame(Id=c(1L,2L,3L,4L,5L),pricetag=c(NA,5,NA,3,NA),category=c(NA,"Z",NA,NA,"Y"),stringsAsFactors=F)
> df1
Id pricetag category
1 1 NA NA
2 2 5 Z
3 3 NA NA
4 4 3 NA
5 5 NA Y
对于不丢失的价格标签值,我想将类别变量重新编码为“ X”。所以我看起来像这样。
> df1
Id pricetag category
1 1 NA NA
2 2 5 X
3 3 NA NA
4 4 3 X
5 5 NA Y
我无法弄清楚具有ifelse()
集成的!is.na()
函数。
有什么想法吗?
答案 0 :(得分:2)
transform(df1, category = replace(category, !is.na(pricetag), "X"))
# Id pricetag category
#1 1 NA <NA>
#2 2 5 X
#3 3 NA <NA>
#4 4 3 X
#5 5 NA Y
答案 1 :(得分:1)
df1 <- data.frame(Id=c(1L,2L,3L,4L,5L),pricetag=c(NA,5,NA,3,NA),category=c(NA,"Z",NA,NA,"Y"),stringsAsFactors=F)
> df1
Id pricetag category
1 1 NA <NA>
2 2 5 Z
3 3 NA <NA>
4 4 3 <NA>
5 5 NA Y
> df1$category[which(!is.na(df1$pricetag))] <- 'X'
> df1
Id pricetag category
1 1 NA <NA>
2 2 5 X
3 3 NA <NA>
4 4 3 X
5 5 NA Y
which
调用将标识df1
的行,这些行不是NA,然后将X
分配给这些行的类别列,而与当前值无关。这是您需要的吗?