使用R,我需要在返回新值时分配变量a
,b
....例如,如果值介于1:5之间,则为其分配a
,如果介于6:7之间,则为其分配b
。这是我的代码:
hg1<- ifelse((hg >= 1) & (hg <= 5), "D",
ifelse(hg = 6), "C",
ifelse((hg >= 7) & (hg <= 8),"B"),
ifelse((hg >= 9) & (hg <= 12),"A")
)
答案 0 :(得分:1)
假设我们需要根据向量中的值(&#39; hg&#39;)在全局环境中创建一些对象。基于该描述,范围从1到5的值将被分配给&#39; D&#39; 6被指定为&#39; C&#39; 7到8将被分配给&#39; B&#39; &#39; A&#39;。如果超出范围的任何值,则将其归类为&#39;其他&#39;
这里,我cbind
通过多次比较创建的逻辑向量,并以{4}的顺序执行%*%
。获取唯一数字索引的比较总数。根据索引,我们可以将组更改为LETTER
组。
v1 <- c( cbind(hg %in% 1:5, hg==6, hg %in% 7:8, hg %in% 9:12) %*% seq_len(4) +1)
split
具有该分组索引的原始向量,以便使用分组索引命名列表元素。
lst <- split(hg, c('Other', LETTERS[4:1])[v1])
它可用于在list2env
的全局环境中创建对象(不推荐使用)。
list2env(lst, envir=.GlobalEnv)
D
#[1] 4 3 4 3 5 4 2 2
A
#[1] 10 9 11 12 9 10 10
B
#[1] 7 7
set.seed(24)
hg <- sample(0:14, 20, replace=TRUE)
答案 1 :(得分:0)
不确定我完全理解。
是否要将hg
分配给新变量a
或b
,在这种情况下:
assign(ifelse(hg %in% 1:5, "a", "b"), hg)
或者您要将字符"a"
或"b"
分配给hg1
,在这种情况下:
hg1 <- ifelse(hg %in% 1:5, "a", "b")
此代码假设hg为1,2,3,4,5,6或7.如果不是这样,则需要进一步开发它。
另一种选择,基于评论:
hg_op <- c(rep("a", 5), "b", rep("c", 2), rep("d", 4)) #once at beginning
hg1 <- hg_op[hg] #as many times as you need
答案 2 :(得分:0)
不确定这是否有帮助,但在第二行,它应该是
ifelse(hg == 6), "C",
检查hg
是否有值6
。