gpt4 book ai didi

r - ifelse 使因子 'forget' 成为其水平顺序

转载 作者:行者123 更新时间:2023-12-04 00:54:15 26 4
gpt4 key购买 nike

我有一个包含两个因素的数据框,例如这个:

data <- data.frame(
x = factor(rep(letters[1:3], 2)),
y = factor(rep(c('z','x','y'), each=2), c('z','x','y'))
)

data
x y
1 a z
2 b z
3 c x
4 a x
5 b y
6 c y

我想将所有 y 对于 xa 变成 NA。所以我尝试:

factor(ifelse(data$x=='a', NA, as.character(data$y)))
<NA> z x <NA> y y
Levels: x y z

获取与原始数据不同的级别顺序,即:

data$y
z z x x y y
Levels: z x y

除了像这样的蛮力之外,你能建议任何保持原始顺序的方法吗:

factor(ifelse(data$x=='a', NA, as.character(data$y)), c('z','x','y'))
<NA> z x <NA> y y
Levels: z x y

最佳答案

您的方法看起来不错。如果你不想手动设置新的级别,你可以引用data$y的级别。

factor(ifelse(data$x == 'a', NA, as.character(data$y)), levels(data$y))

# [1] <NA> z x <NA> y y
# Levels: z x y

您还可以使用 replace(),它不会重置关卡。

replace(data$y, data$x == 'a', NA)

# [1] <NA> z x <NA> y y
# Levels: z x y

关于r - ifelse 使因子 'forget' 成为其水平顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63916757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com