【问题标题】:How can I dynamically assign variable names within a function in data.table in R?如何在 R 中的 data.table 函数中动态分配变量名?
【发布时间】:2023-02-03 02:16:20
【问题描述】:

我有一些关于按执行的任务观察到的化学品浓度的数据。三个人,每人执行两项任务,每项任务重复两次。在五个时间点同时测量三种不同化学物质的浓度。人 A 只完成了两次重复,并且缺少其他一些注意力。 数据如下所示:

    test_dt <- data.table(person = rep(LETTERS[1:3],each = 20),
           task = rep(LETTERS[24:25], each = 10),
           reps = rep(c(1,2),each = 5),
           time = 1:5, chem1 = rnorm(60,1,0.2),
           chem2 = rnorm(60,4,1.1),chem3 = rnorm(60,2,0.75))
   test_dt[person == "A" & reps == 2,`:=`(chem3 = NA_real_)]
   test_dt[person == "B" & task == "X" & reps == 1 &time %in% 3:5,chem1 := NA_real_]
   test_dt[person == "C" & task == "Y" & reps == 2 &time %in% 3:4,chem2 := NA_real_]
   

我想通过任务和重复获取每个人的数据第一个 NA 和 NA 结束的时间。我试过这样做:

lapply(c("chem1","chem2","chem3"),function(var){
  start_var = paste0("na_start_",var)
  end_var = paste0("na_end_",var)
  test_dt[is.na(get(var)), 
          .(deparse(substitute(start_var)) = min(time),
            deparse(substitute(end_var)) = max(time)),
          .(person,task,reps)]
})

但最终出现了这个错误:

"  test_dt[is.na(get(var)), 
          .(deparse(substitute(start_var)) ="
>             deparse(substitute(end_var)) = max(time)),
Error: unexpected ')' in "            deparse(substitute(end_var)) = max(time))"
>           .(person,task,reps)]
Error: unexpected ']' in "          .(person,task,reps)]"
> })
Error: unexpected '}' in "}"

我如何在 R 中的 data.table 中执行此操作?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    代替deparse/substitute,使用setNamessetnames

    lapply(c("chem1","chem2","chem3"),function(var){
      start_var = paste0("na_start_",var)
      end_var = paste0("na_end_",var)
     test_dt[is.na(get(var)), setNames(.(min(time), max(time)),
         c(start_var, end_var)), .(person, task, reps)]
    })
    

    -输出

    [[1]]
       person task reps na_start_chem1 na_end_chem1
    1:      B    X    1              3            5
    
    [[2]]
       person task reps na_start_chem2 na_end_chem2
    1:      C    Y    2              3            4
    
    [[3]]
       person task reps na_start_chem3 na_end_chem3
    1:      A    X    2              1            5
    2:      A    Y    2              1            5
    

    【讨论】:

      猜你喜欢
      • 2020-04-13
      • 2018-12-26
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多