首页 > 解决方案 > 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) : ‘&gt;’ not meaningful for factors

如何在数学上比较数据框中的大小值(按级别)?

标签: r

解决方案


它不起作用的原因是您正在将 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

推荐阅读