0

这可能听起来有点简单,但我无法得到答案。

我在 R 中有一个数据集,其中行中有 26 个样本,列中有许多变量(> 20)。其中一些是分类的,所以我需要做的是根据每个分类变量对每个数值变量进行 Kruskal Wallis 检验,所以我这样做:

env_fact <- read.csv("environ_facts.csv")

kruskal.test(env_fact-1 ~ Categorical_var-1,  data=env_fact)

但是这样我只能对数值变量一个一个的做测试,很烦人。

有没有办法一次对所有数值变量进行所有 Kruskal-Wallis 检验?我可以按每个分类变量重复它​​,因为我只有 4 个,但对于数字变量,我有 20 多个!!

非常感谢

4

2 回答 2

0

由于我没有数据集的样本,我只能“理论上”回答。

首先,您需要识别哪些是数字列。执行此操作的方法如下:

df = tibble(x = rnorm(10), y = rnorm(10), z = "a", w = rnorm(10))
NumericCols = sapply(df, function(x) is.numeric(x))
df_Numeric = df[, Types == TRUE]

现在您获取 , 的数字部分dfdf_Numeric并一次将您的函数blabla应用于每一列:

sapply(df_Numeric, function(x) blabla(x))
于 2019-07-29T15:40:01.080 回答
0

非常感谢欧米。

与一位同事合作,我们得出了一个不完整的与您不同的解决方案:

my.variables <- colnames(env_fact)
for(i in 1:length(my.variables)) {
    if(my.variables[i] == 'Categorical_var') {
        next
    } else {
        kruskal.test(env_fact[,i], env_fact$Categorical_var)
    }
}

但是,我们无法在屏幕上打印/通过分析的“Categorical_var”获得每个“my.variables”的结果。我们只能得到所有“my.variables”作为一个整体的结果。

任何想法??

非常感谢

PS:我的数据如下所示:

Sample,Nunatak,Slope,Altitude,Depth,Fluoride,Acetate,Formiate,Chloride,Nitrate
m4,1,1,1,1,0.044,0.884,0.522,0.198,0.021
m6,1,1,1,2,0.059,0.852,0.733,0.664,0.038
m7,1,1,1,3,0.082,0.339,1.496,0.592,0.034
m8,1,1,2,1,0.112,0.812,2.709,0.357,0.014
m10,1,1,2,2,0.088,0.768,2.535,0.379,0
m11,1,1,3,1,0.101,0.336,4.504,0.229,0
m13,1,1,3,2,0.092,0.681,1.862,0.671,0.018
m14,1,2,2,1,0.12,1.055,3.018,0.771,0
m16,1,2,2,2,0.102,1.019,1.679,1.435,0
m17,1,2,2,3,0.26,0.631,0.505,0.574,0.008

其中 Nunatak、坡度、高度和深度是分类的,其余的是数字的。希望这可以帮助

于 2019-07-31T09:24:53.027 回答