在我的数据集中,我有一个名为ref的变量,范围是0-7。每个参与者都有一个分数。我想对它进行分组,0-3表示“低”,4-7表示“高”。
因此,我尝试创建一个新变量,并尝试使用ifelse函数
control_vs_fast$refsplit <- (ifelse(control_vs_fast$reflection >= 0 & control_vs_fast$reflection <=3, 'low', ifelse(control_vs_slow$reflection >3, 'high', 'no')))我想知道是否有一个不同的函数我可以使用,这样我就不需要有' no‘,因为我没有缺失值。
抱歉,如果我说得不清楚,我是个新手:(
编辑:非常感谢大家!
发布于 2021-01-11 21:21:01
也许你可以试试下面的代码
within(
control_vs_fast,
refsplit <- c("high","low")[(reflection <=3)+1]
)或
within(
control_vs_fast,
refsplit <- ifelse(reflection <=3,"low","high")
)发布于 2021-01-11 21:24:49
这是一个cut工作得很好的地方。
control_vs_fast <- data.frame(reflection = c(-1:5))
control_vs_fast
# reflection
# 1 -1
# 2 0
# 3 1
# 4 2
# 5 3
# 6 4
# 7 5默认情况下,cut使用开端/闭端的数学表示法返回标签:
cut(control_vs_fast$reflection, c(-Inf, 0, 3, Inf))
# [1] (-Inf,0] (-Inf,0] (0,3] (0,3] (0,3] (3, Inf] (3, Inf]
# Levels: (-Inf,0] (0,3] (3, Inf]我们可以去掉标签,使用整数
cut(control_vs_fast$reflection, c(-Inf, 0, 3, Inf), labels = FALSE)
# [1] 1 1 2 2 2 3 3或者定义我们自己的标签
cut(control_vs_fast$reflection, c(-Inf, 0, 3, Inf), labels = c("no", "low", "high"))
# [1] no no low low low high high
# Levels: no low high
as.character(cut(control_vs_fast$reflection, c(-Inf, 0, 3, Inf), labels = c("no", "low", "high")))
# [1] "no" "no" "low" "low" "low" "high" "high"请注意,如果为labels=FALSE,则所有返回值都是整数,否则它们都是factors。如果您需要字符串(和/或不知道factors是什么),则最后一个带as.character的字符串将提供给您字符串。
更正
但是以上所有这些错误地将0标记为"no"而不是"less"。为了解决这个问题,这里有一个稍微长一点的替代方案。如果您使用整型变量,那么简单的重新赋值就可以按原样工作;但是如果您想要字符串,那么factors将带来一个小问题;这里我将使用as.character变量。
control_vs_fast$refsplit <- as.character(cut(control_vs_fast$reflection, c(0, 3, Inf), labels = c("low", "high"), include.lowest = TRUE))
control_vs_fast
# reflection refsplit
# 1 -1 <NA>
# 2 0 low
# 3 1 low
# 4 2 low
# 5 3 low
# 6 4 high
# 7 5 high
control_vs_fast$refsplit[is.na(control_vs_fast$refsplit)] <- "no"
control_vs_fast
# reflection refsplit
# 1 -1 no
# 2 0 low
# 3 1 low
# 4 2 low
# 5 3 low
# 6 4 high
# 7 5 high解释:
问题是cut中的范围要么是左开(默认),要么是右开。让其中一个bin同时左关闭和右关闭的唯一方法是将其设置为第一个范围/bin,然后添加include.lowest=TRUE。从这里开始,任何小于0的值(如果有)都将是NA,这意味着它不在指定的存储箱中。
在此基础上,我们使用基于NA的索引赋值。
发布于 2021-01-11 21:22:18
下面是一个包含可重现数据的示例:
set.seed(1)
x <- sample(0:7, size = 10, replace = TRUE)
ifelse(x <= 3, 'low', "high")
# [1] "low" "low" "high" "low" "low" "high" "high" "low" "high"
# [10] "low"https://stackoverflow.com/questions/65667591
复制相似问题