0

所以我坚持的问题之一是:

我有一些变量 X 取值 {1,2,3,4}。因此

X:1 2 2 4 2 3

我想做的是把1和2变成A,把3和4变成B。

是否有任何可能的建议我将如何去做。还是提示?

我最初考虑使用子集命令,但这些似乎只是从数据集中提取它们。

4

4 回答 4

3

一种可能的选择是recodeVardoBy包中使用

library(doBy)
x <- c(1, 2, 2, 4, 2, 3)
src = list(c(1, 2), c(3, 4))
tgt = list("A", "B")
recodeVar(x, src, tgt)

产生

> recodeVar(x, src, tgt)
[1] "A" "A" "A" "B" "A" "B"
> 

或者你可以使用这个car包:

library(car)
recode(x, "1:2='A'; 3:4='B'")
于 2012-02-01T14:00:06.550 回答
2
X <- c(1,2,2,4,2,3)
Y <- ifelse(X %in% 1:2, "A", "B")
## or
Y <- cut(X,breaks=c(0,2.5,5),labels=c("A","B"))

后一种方法创建一个因子而不是一个字符向量;如果需要,您可以使用as.character将其转回字符向量。

于 2012-02-01T13:55:04.413 回答
0

另一种选择:

LETTERS[ceiling((1:4)/2)]
[1] "A" "A" "B" "B"

LETTERS[ceiling(X/2)]
[1] "A" "A" "A" "B" "A" "B"
于 2012-02-01T17:10:33.797 回答
0

如果是数据框,则dplyr打包:

dataframe %>%
  mutate (newvar = case_when(var %in% c(1, 2) ~ "A",
                   case_when(var %in% c(3, 4) ~ "B")) -> dataframe
于 2020-03-21T04:18:02.467 回答