书名有点乱七八糟,但我不知道还能怎么形容.我来自斯塔塔,所以我仍然掌握了各种因素的诀窍.
基本上,我希望能够分配因子级别和标签,但我错过的任何级别/标签都被分配为默认级别/标签.
采取以下措施:
library(dplyr)
dt <- as.data.frame(mtcars) # load demo data
dt$carb[4:6] <- NA # set some rows to NA for example
dt <- dt%>%
mutate(
carb_f = factor(carb,
levels = c(1,2,3,4),
labels = c("One","Two","Three","Four")
)
)
table(dt$carb, dt$carb_f, exclude=NULL)
这将产生以下结果:
One Two Three Four <NA>
1 5 0 0 0 0
2 0 9 0 0 0
3 0 0 3 0 0
4 0 0 0 10 0
6 0 0 0 0 1
8 0 0 0 0 1
<NA> 0 0 0 0 3
未陈述的6
和8
在合成因数carb_f
中被设置为NA
.虽然这是意料之中的行为,但我希望能够请求如下内容:
dt <- dt%>%
mutate(
carb_f = factor(carb,
levels = c(1,2,3,4),
labels = c("One","Two","Three","Four"),
non-na(10,"Unk") # obvious pseudocode
)
)
要实现此目标,请执行以下操作:
One Two Three Four Unk <NA>
1 5 0 0 0 0 0
2 0 9 0 0 0 0
3 0 0 3 0 0 0
4 0 0 0 10 0 0
6 0 0 0 0 1 0
8 0 0 0 0 1 0
<NA> 0 0 0 0 0 3
...其中未声明的6
和8
被分配到默认级别/标签10
和Unk
,但真实的NA
保持NA
.
有没有一种方法可以在不明确引用6
和8
的情况下处理此问题?