【问题标题】:Repeat transformation for all variables in R对 R 中的所有变量重复转换
【发布时间】:2021-04-09 10:56:42
【问题描述】:

我有 84 个变量,我需要创建新的 42 个变量。每个变量都有一个从 1 到 3 的值。每个新变量都有一个从 1 到 7 的值。第一个新变量的值取决于第一个和第二个变量的值(下面的代码)。我用这个规则编写代码,一切正常。

但我不知道如何为其他变量重复此代码。第二个新变量必须基于第三个和第四个变量,第三个新变量基于第五个和第六个等(new_var2 = ITEM3 & ITEM4, new_var3 = ITEM5 & ITEM6....)。

感谢您的帮助

mydata<-within(mydata, {
  new_var1[ITEM1==3 & ITEM2==3]<-"7"
  new_var1[ITEM1==3 & ITEM2==2]<-"6"
  new_var1[ITEM1==3 & ITEM2==1]<-"5"
  new_var1[ITEM1==2 & ITEM2==1]<-"4"
  new_var1[ITEM1==2 & ITEM2==2]<-"4"
  new_var1[ITEM1==2 & ITEM2==3]<-"4"
  new_var1[ITEM1==1 & ITEM2==1]<-"3"
  new_var1[ITEM1==1 & ITEM2==2]<-"2"
  new_var1[ITEM1==1 & ITEM2==3]<-"1"
})

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以这样做:

    library(dplyr)
    library(tibble)
    recode_function <- function(x, y){
        case_when(
            x == 3 & y == 3 ~ 7, 
            x == 3 & y == 2 ~ 6,
            x == 3 & y == 1 ~ 5, 
            x == 2  ~ 4, 
            x == 1 & y == 1 ~ 3, 
            x == 1 & y == 2 ~ 2, 
            x == 1 & y == 3 ~ 1, 
            TRUE ~ NA_real_
        )
    }
    
    dat <- tibble(
        ITEM1 = sample(1:3, 100, replace=TRUE),
        ITEM2 = sample(1:3, 100, replace=TRUE),
        ITEM3 = sample(1:3, 100, replace=TRUE),
        ITEM4 = sample(1:3, 100, replace=TRUE),
        ITEM5 = sample(1:3, 100, replace=TRUE),
        ITEM6 = sample(1:3, 100, replace=TRUE),
        ITEM7 = sample(1:3, 100, replace=TRUE),
        ITEM8 = sample(1:3, 100, replace=TRUE)
    )
    
    firsts <- dat %>% select(seq(1,8, by=2))
    seconds <- dat %>% select(seq(2,8, by=2))
    out <- sapply(1:4, function(i)recode_function(firsts[,i], seconds[,i]))
    head(firsts)
    # # A tibble: 6 x 4
    #      ITEM1 ITEM3 ITEM5 ITEM7
    #      <int> <int> <int> <int>
    # 1     3     1     3     1
    # 2     1     3     3     3
    # 3     2     3     1     1
    # 4     1     1     2     2
    # 5     1     2     1     2
    # 6     2     1     2     3
    head(seconds)
    # # A tibble: 6 x 4
    #      ITEM2 ITEM4 ITEM6 ITEM8
    #      <int> <int> <int> <int>
    # 1     1     3     2     2
    # 2     1     1     2     3
    # 3     3     1     1     1
    # 4     1     1     3     3
    # 5     3     3     1     2
    # 6     2     1     3     3
    head(out)
    #      [,1] [,2] [,3] [,4]
    # [1,]    5    1    6    2
    # [2,]    3    5    6    7
    # [3,]    4    5    3    3
    # [4,]    3    3    4    4
    # [5,]    1    4    3    4
    # [6,]    4    3    4    7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多