[英]Apply function across subset of columns in data.table with .SDcols
[英]Apply function to subset elements that satisfy a criteria across subset of columns in data.table
考慮data.table, exampleDT
,
set.seed(7)
exampleDT = data.table(colA = rnorm(10,15,5),
colB = runif(10,100,150),
targetA = rnorm(10,12,2),
targetB = rnorm(10,8,4))
例如,如果我要計算targetA
列中所有元素的均值,這些均值低於某個閾值(例如10),則可以執行以下操作:
examp_threshold = 10
exampleDT[targetA<examp_threshold,mean(targetA)]
# [1] 9.224007566814299
而且,例如,如果我要計算targetA
和targetB
列中所有元素的均值,則可以執行以下操作:
target_cols = names(exampleDT)[which(names(exampleDT) %like% "target")]
exampleDT[,lapply(.SD,mean),.SDcols=target_cols]
# targetA targetB
# 1: 12.60101574551183 7.585007905896557
但是我不知道如何將兩者結合起來。 也就是說,計算包含指定字符串(在此情況下為“目標”)的所有列中的所有元素的均值低於某個指定閾值(此處為10)的平均值。 這是我的第一個猜測,但未成功:
exampleDT[.SD<examp_threshold,lapply(.SD,mean),.SDcols=target_cols]
#Empty data.table (0 rows) of 2 cols: targetA,targetB
您需要在j
表達式中設置子集,如下所示:
exampleDT[, lapply(.SD, function(x) mean(x[x<examp_threshold])),.SDcols=target_cols]
# targetA targetB
#1: 9.224008 6.66624
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.