この質問を参照して、関数に基づいて複数のデータフレームを使用できるかどうか疑問に思っていました。つまり、リンクされた質問の例では、についてのみ説明しましmean
たsd
。t-test
他の 2 つの関数に2 つのサンプルを追加する必要がある場合は、と に使用data.frame
されるもの以外に別のものを使用する必要がmean
ありsd
ます。
このシナリオで何か提案はありますか?
リンクされたスレッドから例をコピーする:
# Random generation
set.seed(12)
df1 <- data.frame(col1 = sample(1:100, 10, replace=FALSE),
col2 = sample(1:100, 10, replace=FALSE))
set.seed(16)
df2 <- data.frame(col3 = sample(10:90, 10, replace=FALSE),
col4 = sample(10:90, 10, replace=FALSE))
# Introducing null values
df1$col1[c(3,5,9)] <- NA
df1$col2[c(3,6)] <- NA
df2$col3[c(5,8)] <- NA
df2$col4[c(4,5,9)] <- NA
# sapply with return a value for a function
stat <- data.frame(Mean=numeric(length = length(df1)), row.names = colnames(df1))
stat[,c('Mean','Sd')] <- vapply(df1,function(x) c(mean(x,na.rm=TRUE),sd(x,na.rm=TRUE)),numeric(2))
これに関数を含める方法はt.test(df1$col1,df2$col3)
?
funs <- list(sd=sd, mean=mean)
sapply(funs, function(x) sapply(df1, x, na.rm=T))
期待される出力: (データフレーム 2x5 で以下のようなもの)
mean(col1) sd(col1) mean(col3) sd(col3) t.test(col1,col3)$p.value
mean(col2) sd(col2) mean(col4) sd(col4) t.test(col2,col4)$p.value