r - 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
解决方案
因为 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"))
推荐阅读
- c - main 内部的纯函数没有按照我的意图获取和处理 x 的单个值
- html - 我想获取单击用户的 ID 并在我在引导模式上单击是时将其删除
- sql-server - 如何更新 SQL 表中的计算列
- spring-boot - spring-boot 优雅关机
- python - 如何使scrapy输出到stdout以从Python中读取
- git - `git commit --amend` 是否触及了不必要的文件?
- groovy - 循环中带有电子邮件的 Jenkinsfile 在第一次迭代时失败
- php - Twitter GET user_timeline 不总是返回 Count=200
- html - 如何在 Jekyll 网站上实现可折叠菜单
- javascript - 如何在 MVC 中使用 ajax 在 FormCollection 中获取 radioButton 值