【发布时间】:2021-02-22 19:41:17
【问题描述】:
我有一个杂乱无章的因子变量,其级别超出了应有的级别。这些案例来自一项公开调查,许多参与者写错字或只是以不同的方式回答了类似的答案。
这是代表我的问题的示例 df:
df <- data.frame(ID=seq(1:10),
Nationality=c("espanol", "spaniol", "ESPANOL",
"spanish", "colombia", "Colombian",
"British", "brit", "ESPanol", "UK")
)
我想要的输出是这样的:
> df
ID Nationality
1 1 Spanish
2 2 Spanish
3 3 Spanish
4 4 Spanish
5 5 Colombian
6 6 Colombian
7 7 British
8 8 British
9 9 Spanish
10 10 British
这是我试图做的,以便将这 10 个人为因素的水平减少到只有 3 个(西班牙、哥伦比亚、英国),因为它应该是:
library(forcats)
levels(df$Nationality) <- fct_collapse(df$Nationality, Spanish = c("espanol", "spaniol", "ESPANOL",
"spanish", "ESPanol"),
Colombian = c("colombia", "Colombian"),
British = c("British", "brit", "UK")
)
这有效地将我的“国籍”因素降低到 3 个级别,但输出看起来像这样,并且与第一个类似:
> df
ID Nationality
1 1 Colombian
2 2 British
3 3 British
4 4 Spanish
5 5 Spanish
6 6 Spanish
7 7 Spanish
8 8 Spanish
9 9 Colombian
10 10 British
在我正在使用的更大数据集中,它也不起作用,但输出更糟,因为所有案例都变成了“西班牙”,我不知道为什么会发生这种情况。
提前感谢您的帮助! 最好的, 卢卡斯
【问题讨论】: