Я пытаюсь написать функцию в основном с наборами данных агрегации/слияния/подмножества. Мой фрейм данных выглядит так:
NameA NameB NameC Score1 Score2
A F K 3 3
B F L 5 5
C F M 7 4
D G N 2 2
E G O 5 8
и функция, которую я буду запускать:
test <- Fun(data, Score1, NameB)
Во-первых, я хочу вычислить среднее значение Score1, сгруппированное по NameB:
Fun <- function(df, col, group_by){
setDT(df)
df1<- df[, sapply(.SD, mean), .SDcols = col, by= group_by]
}
После некоторого дополнительного кодирования мой фрейм данных выглядит так:
NameA NameB NameC Score1 Score2 Group_Mean
A F K 3 3 4
B F L 5 5 4
C F M 4 4 4
D G N 2 2 5
E G O 5 8 5
Затем я хочу подмножить свой фрейм данных с Score1 != Score2. Поэтому я пишу:
Fun <- function(df, col, group_by){
setDT(df)
df1<- df[, sapply(.SD, mean), .SDcols = col, by= group_by]
df2 <- df1[which(df1[col] != df[Score2])]
}
но это дает мне сообщение об ошибке: Error in Ops.data.frame(df2[col], df[Score2]) :
‘==’ only defined for equally-sized data frames
После этого шага я хочу сделать еще немного математики и подмножества, как показано ниже:
Fun <- function(df, col, group_by){
setDT(df)
df1<- df[, sapply(.SD, mean), .SDcols = col, by= group_by]
df2 <- df1[which(df1[col] != df[Score2])]
df2["NewCol"] <- abs(df2[col] - df2[Score2])
output <- df2[which(df2[NewCol] > 1 or df2[NewCol] < 1.5)]
return(output)
}
Я новичок в пользовательской функции R и R. После части с сообщением об ошибке я застрял надолго. Пожалуйста, если кто-нибудь может дать мне какие-либо предложения по моему коду выше, я был бы очень признателен!