如何使用setDT将多语言变量合并为指定分类?
问题描述
我的数据集包含LanguageDSC语言变量,示例数据如下:
> dput(dt$LanguageDSC) c("English", "English", "English", "Portuguese", "English", "English", "English", "English", "English", "Mandarin", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "Spanish", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "Spanish", "Spanish", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English", "Arabic", "Spanish", "English", "English", "English", "English", "English", "English", "English", "English", "English", "English")
数据集共有约30种语言,我希望将其合并为以下分类:
- English
- Spanish
- Cantonese
- Mandarin
- Vietnamese
- Other(所有其他语言)
目前我使用如下代码,但仅能将语言分为'English'和'Other'两类,请问如何修改代码以包含上述其他4种语言?
setDT(dt)[!(LanguageDSC == "English"), LanguageDSC := "Other"]
解决方案
可以通过指定保留的目标语言列表,将不在列表中的语言统一替换为"Other"。用data.table的语法修改如下:
# 定义需要保留的语言分类 target_langs <- c("English", "Spanish", "Cantonese", "Mandarin", "Vietnamese") # 替换不在目标列表中的语言为"Other" setDT(dt)[!(LanguageDSC %in% target_langs), LanguageDSC := "Other"]
逻辑说明
- 先创建包含所有需保留语言的向量
target_langs; - 使用
%in%运算符判断LanguageDSC的取值是否在目标列表内; - 对不在列表中的行,将
LanguageDSC赋值为"Other"。
处理后,原数据集中的Mandarin、Spanish会被保留,Portuguese、Arabic等其他语言都会被归类到"Other",完全符合需求。
如果习惯使用dplyr语法,也可以这样实现:
library(dplyr) dt <- dt %>% mutate(LanguageDSC = if_else(LanguageDSC %in% target_langs, LanguageDSC, "Other"))
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

