r - R:在数据框中,使用因子变量的级别时出现错误
问题描述
这按预期工作:
> sizes <- factor(c(1,2,3,7,9,2,1,3,7,3,9,2,3), levels = c(1,3,2,7,9),ordered=TRUE)
> sizes[2]
[1] 2
Levels: 1 < 3 < 2 < 7 < 9
> x=sizes[3]>sizes[2]
> x
[1] FALSE
当“大小”是使用 read.csv() 加载的数据框中的一列时,我收到此错误:
> A_Dataset <- read_csv("A_Dataset.csv",
+ col_types = cols(A = col_integer(),
+ B = col_integer(), sizes = col_factor(levels = c("1",
+ "3", "2", "7", "9"))))
> A_Dataset$sizes = factor(A_Dataset$sizes, levels=c(1,3,2,7,9),ordered=TRUE)
> is.ordered(Week1_Dataset$sizes)
[1] TRUE
> x=A_Dataset[2,3]>Week1_Dataset[1,3]
Warning message:
In Ops.factor(left, right) : ‘>’ not meaningful for factors
如何在数学上比较数据框中的大小值(按级别)?
解决方案
它不起作用的原因是您正在将 tibble 与 tibble 进行比较。建议阅读hadley wickham 的 R book,其中写道:
用 [ 子集一个 tibble 总是返回一个 tibble:
我们可以尝试一个例子:
sizes <- factor(c(1,2,3,7,9,2,1,3,7,3,9,2,3), levels = c(1,3,2,7,9),ordered=TRUE)
write.csv(data.frame(A=1:length(sizes),sizes=sizes),"test.csv",row.names=FALSE)
A_Dataset <- read_csv("test.csv",
col_types = cols(A = col_integer(),
sizes = col_factor(levels = c("1","3", "2", "7", "9"))))
A_Dataset$sizes = factor(A_Dataset$sizes, levels=c(1,3,2,7,9),ordered=TRUE)
如果您查看课程:
class(A_Dataset[1,2])
[1] "tbl_df" "tbl" "data.frame"
您无法比较 data.frames,您可以执行以下操作:
class(A_Dataset$sizes[2])
[1] "ordered" "factor"
A_Dataset$sizes[2] > A_Dataset$sizes[1]
[1] TRUE
这有效:
as.data.frame(A_Dataset[2,2]) >as.data.frame(A_Dataset[1,2])
sizes
[1,] TRUE
推荐阅读
- spring-bean - 将 BeanUtils 方法创建为 Java Bean 的问题
- java - java.lang.AssertionError 试图测试一个 INSERT 语句是否执行成功
- r - 将列表列表中的项目分配为数据框的列名
- python - 带有 numba 和 @guvectorize 的“签名中的错误令牌”
- postgresql - 通过运行 ANALYZE 来提高查询性能?
- ios - 如何在自定义视图中创建更改属性的修饰符
- swift - SwiftUI Simple ForEach 多次报错不符合View
- python - Python Pip 未将包安装到虚拟环境 Visual Studio for Mac 中的正确目录中 - “未解决的导入”
- javascript - Rxjs - 如何在 combinelatest 之后调用两个 httpService?
- python - 在 Python 中编写 Discord 机器人 - 如何使机器人将命令限制到某个服务器?