基于另一个变量水平的不同模式的重新编码

Different Patterns of Recodes Based on Level of Another Variable

我在 R 中工作,我正在尝试折叠变量 A 的代码(将 6 级变成 4 级)。我还需要 A 的重新编码在变量 B 的不同级别(2 个级别)不同。所以我需要类似的东西:

df$A[df$B=='1']=重新编码(df$A, "'1'='4'; '2'='2'; '3'='4'; '4'='3'; '5'='4'; '6'='4'")

df$A[df$B=='2']=重新编码(df$A, "'1'='1'; '2'='1'; '3'='1'; '4'='1'; '5'='1'; '6'='1'")

我希望这两个都在一个新变量 C 中(将 6 X 2 矩阵折叠成一个 4 级因子)。我想我可以用循环或函数之类的东西来做,但我是新手,不知道该怎么做。

只有 2 个组,您应该可以使用 ifelse():

    set.seed(42)
    dfr <- data.frame(A=sample(as.character(1:6), 100, replace=TRUE), 
         B=sample(as.character(1:2), 100, replace=TRUE))
    xtabs(~A+B, dfr)
#   B
# A    1  2
#   1  5 11
#   2 12  2
#   3  6  9
#   4  5 11
#   5  9 11
#   6  7 12
    v1 <- c('4', '2', '4', '3', '4', '4')
    v2 <- c('1', '1', '1', '1', '1', '1')
    idx <- as.numeric(dfr$A)
    dfr$C <- ifelse(dfr$B == "1", v1[idx], v2[idx])
    xtabs(~C+A+B, dfr)
#  , , B = 1
#   A
# C    1  2  3  4  5  6
#   1  0  0  0  0  0  0
#   2  0 12  0  0  0  0
#   3  0  0  0  5  0  0
#   4  5  0  6  0  9  7

# , , B = 2

#   A
# C    1  2  3  4  5  6
#   1 11  2  9 11 11 12
#   2  0  0  0  0  0  0
#   3  0  0  0  0  0  0
#   4  0  0  0  0  0  0

虽然 OP 中没有提到预期输出,但似乎需要根据列 B 的值 recodeA 来准备一个精细的 4 级因子。

# Data
df <- data.frame(A = 1:6, B = rep(2:1,3))
df
#  A B
#1 1 2
#2 2 1
#3 3 2
#4 4 1
#5 5 2
#6 6 1

#Use of which to find matching rows
index1 <- which(df$B == 1)
index2 <- which(df$B == 2)

 df$C[index1] <- recode(df$A[index1], '1'='4', '2'='2', '3'='4', '4'='3', '5'='4', '6'='4')

 df$C[index2] = recode(df$A[index2], '1'='1', '2'='1', '3'='1', '4'='1', '5'='1', '6'='1')

df
 #  A B C
 #1 1 1 4
 #2 2 2 1
 #3 3 1 4
 #4 4 2 1
 #5 5 1 4
 #6 6 2 1



> unique(df$C)
[1] "1" "2" "3" "4"