将新变量分配给R中的值

时间:2015-08-03 12:12:10

标签: r

使用R,我需要在返回新值时分配变量ab ....例如,如果值介于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")
         )

3 个答案:

答案 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分配给新变量ab,在这种情况下:

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