首页 > 解决方案 > R不识别因子

问题描述

我将在 R 中进行 Kruskal-Wallis 测试(测试鱼的优势状态(五组,从 1-5 测量)和鱼的攻击之间是否存在差异)但似乎我有一些问题因素。我从 Excel 导入数据集。R 不将支配状态识别为一个因素(在询问时返回 FALSE is.factor(dominance_status)。当我将数据集作为文本文件导入时,R 不会将第一行识别为列名,而是将 V1 和 V2 写为列的名称。

如果有人可以帮助我解决这个问题,我将非常感激!

Attack_data
Indvid Dominance_status Attacks
<chr> <dbl> <dbl>
1 a1 3 0
2 a2 3 0
3 a3 4 0

# ... with 22 more rows

is.factor(Dominance_status) [1] FALSE

标签: rkruskal-wallis

解决方案


因为 Dominance_status 是用数字编码的,所以大多数 read* 函数会猜测它是一个数字类而不是一个因子。

读入数据后,您可以简单地使用 as.factor() 将类更改为因子,以强制 R 将 Dominance_status 视为一个因子。

df <- data.frame(stringsAsFactors=FALSE,
             Indvid = c("a1", "a2", "a3"),
   Dominance_status = c(3, 3, 4),
            Attacks = c(0, 0, 0)
)

is.factor(df$Dominance_status)
#> [1] FALSE

df$Dominance_status <- as.factor(df$Dominance_status)

is.factor(df$Dominance_status)
#> [1] TRUE

reprex 包(v0.2.0) 于 2019 年 2 月 20 日创建。

或者,您可以使用 colClasses 指定 Dominance_status 是您首先读取数据时的一个因素。以下是使用 read.csv 执行此操作的方法:

read.csv(filename, colClasses = c(Dominance_status = "factor"))


推荐阅读