У меня есть образец данных. Таблица данных
sampledt<- data.table("BP"=c(seq(c(1:3)),c(1:2)) ,"STATUS"=c(rep("CASE",5),rep("CONTROL",5) ), "value"=c(0.8,0.9,0.10,0.9,0.10))
Есть столбцы - BP - базовая пара, статус, то есть регистр и контроль. Стоимость - это величина АД, стратифицированная по статусу. Мне нужно получить среднее значение, сгруппированное по BP и STATUS, которое я получаю, используя следующий код:
sampledt[,.("meaned_group"=mean(value)),by=.(BP,STATUS)] ## this achieves desired results
Однако я хотел бы создать функцию для выполнения этой задачи. Иногда мне нужно получить среднее значение просто по BP
или, скажем, по столбцу STATUS
. Или вместо того, чтобы означать, меня интересует сумма.
join_group_datatable<-function(temp_datat,temp_namecolumn,column_value,func_join, list_groupby){
##temp_datat - temp data.table
## temp_namecolumn - output column name - grouped_mean or meaned_group
## column_value column on which function needs to be applied
## func_join - function may be mean, may be sun
## list_groupby - vector of group
temp_datat[,.(temp_namecolumn=func_join(column_value) , by=.(list_groupby))]
}
Я устанавливаю функцию и запускаю следующую строку кода:
join_group_datatable(sampledt,"meaned_group","value",mean,c("BP","STATUS"))
Это дает мне ошибку / предупреждение:
Warning message:
In mean.default(column_value) :
argument is not numeric or logical: returning NA
Класс входных данных. значение таблицы - numeri c. Я не могу понять, как заставить функцию передавать имена столбцов, функцию и получать желаемые результаты.