对于循环,在 R 中进行替换
For loops, with replacement in R
我有一个包含因子的数据框。
dat <- c("low", "high", "middle", "middle", "low", "low")
dat <- factor(dat, levels = c("low", "middle", "high")
lvl <- unique(sort(dat))
x <- seq(1,3,1)
我想遍历每个因素,如果它等于第 i 个级别,则用数字变量替换这些因素。
for(i in 1:3){
if(dat == lvl[i]) {
dat <- x[i]
}
}
我不断收到此错误:the condition has length > 1 and only the first element will be used
。
一定有简单的解决办法吧?
为清楚起见编辑:
我并不是要用相应的级别替换向量。我正在尝试用与级别相对应的某个序列(在本例中为 1、2、3)中的术语替换条目。
您可以使用 ifelse,但对于此特定任务,您可以只使用 as.numeric。
dat <- as.numeric(dat)
这是你想要做的吗?
dat <- factor(c("low", "high", "middle", "middle", "low", "low"))
levels(dat)
# [1] "high" "low" "middle"
lvl = c(99, 86, 123) # New names for level
levels(dat) = lvl
dat
# 86 99 123 123 86 86
# Levels: 99 86 123
我有一个包含因子的数据框。
dat <- c("low", "high", "middle", "middle", "low", "low")
dat <- factor(dat, levels = c("low", "middle", "high")
lvl <- unique(sort(dat))
x <- seq(1,3,1)
我想遍历每个因素,如果它等于第 i 个级别,则用数字变量替换这些因素。
for(i in 1:3){
if(dat == lvl[i]) {
dat <- x[i]
}
}
我不断收到此错误:the condition has length > 1 and only the first element will be used
。
一定有简单的解决办法吧? 为清楚起见编辑:
我并不是要用相应的级别替换向量。我正在尝试用与级别相对应的某个序列(在本例中为 1、2、3)中的术语替换条目。
您可以使用 ifelse,但对于此特定任务,您可以只使用 as.numeric。
dat <- as.numeric(dat)
这是你想要做的吗?
dat <- factor(c("low", "high", "middle", "middle", "low", "low"))
levels(dat)
# [1] "high" "low" "middle"
lvl = c(99, 86, 123) # New names for level
levels(dat) = lvl
dat
# 86 99 123 123 86 86
# Levels: 99 86 123