【发布时间】:2017-06-23 20:02:05
【问题描述】:
我正在尝试使用 dplyr::mutate() 重新编码一些因子水平,以便所有“MOT”和“CHI”因子水平保持原样,而所有其他因子水平都转向“OTH”。
我的数据如下所示:
subj | speaker | word
1 MOT apple
1 CHI baby
1 SI1 baby
2 CHI dog
2 CHI cat
2 FAT cat
我希望它看起来像这样:
subj | speaker | word
1 MOT apple
1 CHI baby
1 OTH baby
2 CHI dog
2 CHI cat
2 OTH cat
我的代码如下所示:
new.df <- data %>%
dplyr::select(subj, speaker) %>%
mutate(speaker = factor(speaker),
speaker = ifelse(speaker %in% c("CHI", "MOT"), speaker, "OTH"))
但是,当我运行此脚本时,某些级别会转换为“OTH”,而其他所有级别都会更改为数字。无论我是否包含 factor(speaker) 命令,都会发生这种情况:
subj | speaker | word
1 175 apple
1 86 baby
1 OTH baby
2 86 dog
2 86 cat
2 OTH cat
它正在将因素更改为“OTH”,但我的 ifelse 代码的 TRUE 元素似乎是问题所在。
非常感谢!
【问题讨论】:
-
您可能希望 as.character(speaker) 作为 ifelse 的第二个参数。 R 因子实际上是整数。如果演讲者是角色,那么您在 ifelse 操作之前进行因子调用时会在脚上射击自己。之后可能会有意义。
-
成功了!非常感谢!但我不明白为什么会发生这种情况 - 当我省略 as.factor() 命令时,R 告诉我扬声器已经是一个字符向量。
-
R 中的因子是整数 - 可以在创建因子时命名的整数。