具有多个SDCOL的r数据表lappy

具有多个SDCOL的r数据表lappy,r,data.table,lapply,R,Data.table,Lapply,我试图使用一个lappy,它在看似简单的代码行中考虑了两列列表(都是数字类型),但输出并不像预期的那样 这是我的代码: x<-50 measure <- c("haz", "waz", "whz", "htcm", "wtkg", "bmi") new_measure_1.5 <- paste(measure, "1.5", sep =

我试图使用一个lappy,它在看似简单的代码行中考虑了两列列表(都是数字类型),但输出并不像预期的那样

这是我的代码:

x<-50

measure <- c("haz", "waz", "whz", "htcm", "wtkg", "bmi")
new_measure_1.5 <- paste(measure, "1.5", sep = "_")
new_temp_cols<-paste("temp", new_measure_1.5, sep = "_")
new_columns<-paste(new_measure_1.5, "1", sep="_")

newcols_1.5_months<-function(x, agedays, new_temp_cols, y){
    ifelse(agedays==x, new_temp_cols, y)
  }

DT[, (new_columns) := lapply(.SD, function(y) newcols_1.5_months(x, agedays, new_temp_cols, y)), .SDcols = new_columns ]
有没有简单的解决办法

****编辑以添加一小部分虚拟数据,类似于我的数据表

measure<-c("haz", "waz")
new_measure_1.5 <- paste(measure, "1.5", sep = "_")
new_temp_cols<-paste("temp", new_measure_1.5, sep = "_")
new_columns<-paste(new_measure_1.5, "1", sep="_")


anthro <- data.table

    (agedays = c(25,50,53,22,37,50,12,45,50,15,33,50),
                               temp_haz_1.5 = c(1.2,1.5,1.7,2.0,4.5,6.7,6.8,6.7,4.5,6.6,8.9,6.7),
                               temp_waz_1.5 = c(3.2,1.8,6.7,2.8,3.5,7.7,9.8,1.7,6.9,3.8,0.9,4.7),
                   haz_1.5_1 = c(1.2,2.5,4.7,7.0,4.7,6.8,6.3,2.7,5.5,8.6,3.9,6.7),  
                   waz_1.5_1 =c(6.2,2.5,5.7,7.0,2.5,7.7,8.8,9.7,2.5,4.6,5.9,6.7))

measure如果我们有多个列,那么使用
Map
在每个对应的列集合上循环并应用函数

library(data.table)
x <- 50
DT[, (new_columns) := Map(function(u, y) 
    newcols_1.5_months(u, DT[['agedays']], x, y),
    .SD[, new_columns, with = FALSE], 
       .SD[, new_temp_cols, with = FALSE]) ]
库(data.table)

x(1)您提到了
新度量值\u 3.5
,但定义了
新度量值\u 1.5
,打字错误?(2)
new_列
显式包含这些名称,因此
data.table
将保留这些名称是有意义的。示例数据将在此处提供信息。@r2evans是的,这是一个输入错误!对不起,那太尴尬了。我只是编辑了我的帖子来解决这个问题。感谢您指出这一点。@akrun刚刚编辑了这篇文章,添加了一些伪数据。您能检查下面的代码吗?因为x是在函数之前给出的agedays值(x==50),我应该添加另一个变量来代替x吗?这不就是在新的_列中携带x(50)吗?我运行了代码,其中agedays==x的单元格只在new中保存NA值_columns@boodaloo1我理解这样一个问题,即您有两组列,如果“agedays”列等于第一组列,则您希望比较这两组列,并将其替换为第二组列的值set@boodaloo1可以这就是困惑。我今天早上回到我的代码,能够修复NA值。唯一的问题是两行变量(新的列和新的临时列)出现了故障。我交换了订单,结果成功了。快速修复!谢谢你的帮助!
library(data.table)
x <- 50
DT[, (new_columns) := Map(function(u, y) 
    newcols_1.5_months(u, DT[['agedays']], x, y),
    .SD[, new_columns, with = FALSE], 
       .SD[, new_temp_cols, with = FALSE]) ]
newcols_1.5_months<- function(u, agedays, x,  y){
      ifelse(agedays==x, u, y)
   }
DT <- data.table(agedays = c(25,50,53,22,37,50,12,45,50,15,33,50),
                               temp_haz_1.5 = c(1.2,1.5,1.7,2.0,4.5,6.7,6.8,6.7,4.5,6.6,8.9,6.7),
                                temp_waz_1.5 = c(3.2,1.8,6.7,2.8,3.5,7.7,9.8,1.7,6.9,3.8,0.9,4.7),
                    haz_1.5_1 = c(1.2,2.5,4.7,7.0,4.7,6.8,6.3,2.7,5.5,8.6,3.9,6.7),  
                    waz_1.5_1 =c(6.2,2.5,5.7,7.0,2.5,7.7,8.8,9.7,2.5,4.6,5.9,6.7))