我想在每个数据框架中比较58列,看看它们之间是否存在显著差异(单独或作为一个整体),因为58列中的每一列都包含一个盆地,并且将是整体的总和,但仍然单独代表不同的东西。我不知道该怎么做t。test。我对编程和R真的很陌生
这是一种使用lapply
循环对两个数据帧的所有列进行t检验的方法。每个测试返回一个类"htest"
的列表,sapply
指令提取感兴趣的列表成员。
tests_list <- lapply(seq_along(df1), function(i){
t.test(df1[[i]], df2[[i]])
})
sapply(tests_list, '[[', 'statistic')
sapply(tests_list, '[[', 'p.value')
sapply(tests_list, '[[', 'conf.int')
测试数据set.seed(2021)
n <- 20
df1 <- matrix(rnorm(n*4), ncol = 4)
df2 <- matrix(rnorm(n*4), ncol = 4)
df1 <- as.data.frame(df1)
df2 <- as.data.frame(df2)
set.seed(2021)
n <- 20
df1 <- matrix(rnorm(n*4), ncol = 4)
df2 <- matrix(rnorm(n*4), ncol = 4)
df1 <- as.data.frame(df1)
df2 <- as.data.frame(df2)
在最简单的情况下,您将遍历每列并执行多个t-检验,如下所示。
# Dataframe 1: Col 1: It has 100 values, mean = 1, SD = 1
df_1_col_1 = rnorm(100, 1, 1)
# Dataframe 2: Col 1: It has 75 values, mean = 2, SD = 1
df_2_col_1 = rnorm(75, 2, 1)
# Null hyposthesis: difference between x and y is = 0
t.test(df_1_col_1, df_2_col_1)
# P-value < 0.05 you reject the null hypothesis.
或者,您可以按行聚合58列,以便为每行获取一个值。例如:以58列值的mean
为例。现在你将得到一个值列表(df_1_col_1
&dataframe 1
和dataframe 2
的df_2_col_1
)。如果你不喜欢简单的mean
,你可以在你的数据框架上做PCA
,并使用两个数据框架的第一个主成分,来做t检验。