我正在尝试替换长向量值,例如:
- 如果该值等于 1、2 或 3,则它将被替换为 1。
- 如果该值等于 6 、 7 、 8 ,则它将被 2 替换。
- 如果该值等于 4 、 5 、 9 ,则它将被替换为 3 。
我尝试了以下操作,但没有给出预期的输出:
set.seed(1)
x=sample(c(1,2,3,4,5,6,7,8,9),size=15,replace=TRUE)
print("step1")
x
as.numeric(gsub(c(1,2,3), 1, x))
as.numeric(gsub(c(6,7,8), 2, x))
as.numeric(gsub(c(4,5,9), 3, x))
print("step2")
x
我获得了以下内容:
[1] "step1"
3 4 6 9 2 9 9 6 6 1 2 2 7 4 7
Warning message in gsub(c(1, 2, 3), 1, x):
"l'argument pattern a une longueur > 1 et seul le premier élément est utilisé"
3 4 6 9 2 9 9 6 6 1 2 2 7 4 7
Warning message in gsub(c(6, 7, 8), 2, x):
"l'argument pattern a une longueur > 1 et seul le premier élément est utilisé"
3 4 2 9 2 9 9 2 2 1 2 2 7 4 7
Warning message in gsub(c(4, 5, 9), 3, x):
"l'argument pattern a une longueur > 1 et seul le premier élément est utilisé"
3 3 6 9 2 9 9 6 6 1 2 2 7 3 7
[1] "step2"
3 4 6 9 2 9 9 6 6 1 2 2 7 4 7
更准确地说,我想将向量 x 中的一组值(例如 {6,7,8}
)替换为一个特定值(例如 2
) .
我希望我的问题很清楚,我尝试了类似问题的解决方案,但没有获得预期的输出。
最佳答案
尝试这个替换方案。向量xori
具有原始值,而x
已随不同条件而改变。此外,快捷方式 1:3
相当于 c(1,2,3)
。代码如下:
#Code
set.seed(1)
x=sample(c(1,2,3,4,5,6,7,8,9),size=15,replace=TRUE)
xori <- x
#Replace
x[x %in% 1:3]<-1
x[x %in% 6:8]<-2
x[x %in% c(4,5,9)]<-3
#Print
xori
x
输出:
xori
[1] 9 4 7 1 2 7 2 3 1 5 5 6 7 9 5
x
[1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3
如果需要一种方式:
#One way
x <- ifelse(x %in% 1:3,1,
ifelse(x %in% 6:8,2,
ifelse(x %in% c(4,5,9),3,NA)))
输出:
x
[1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3
关于r - 如何替换特定的向量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64015195/