新创建的数据框丢失了其向量类别的标签
Newly created data frame loses the labels for the categories of its vectors
我有这样一个数据框:
> str(dynamics)
'data.frame': 3517 obs. of 3 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ y2015: int 245 129 301 162 123 125 115 47 46 135 ...
$ y2016: int NA 385 420 205 215 295 130 NA NA 380 ...
我把这3个向量拿出来给它们取不同的名字,
第 1 列:
> plantid <- dynamics$id
> head(plantid)
[1] 1 2 3 4 5 6
第 2 列:
(我把它分成了不同的类,标为2,3,4和5)
> y15 <- dynamics$y2015
> year15 <- cut(y15, breaks = c(-Inf, 50, 100, 150, Inf), labels = c("2", "3", "4", "5"))
> str(year15)
Factor w/ 4 levels "2","3","4","5": 4 3 4 4 3 3 3 1 1 3 ...
> head(year15)
[1] 5 4 5 5 4 4
Levels: 2 3 4 5
第 3 列:
(这里也一样)
> y16 <- dynamics$y2016
> year16 <- cut(y16, breaks = c(-Inf, 50, 100, 150, Inf), labels = c("2", "3", "4", "5"))
> str(year16)
Factor w/ 4 levels "2","3","4","5": NA 4 4 4 4 4 3 NA NA 4 ...
> head(year16)
[1] <NA> 5 5 5 5 5
Levels: 2 3 4 5
到目前为止一切顺利!
当我通过cbind()
将上述3个向量组合成一个新的数据框时,问题就出现了,新创建的向量层没有了
看我的代码:
SD1 = data.frame(cbind(plantid, year15, year16))
head(SD1)
我得到这样的数据框:
> head(SD1)
plantid year15 year16
1 1 4 NA
2 2 3 4
3 3 4 4
4 4 4 4
5 5 3 4
6 6 3 4
如您所见,第 2 列和第 3 列的级别已从 2, 3, 4, 5
变回 1, 2, 3, 4
我该如何解决?
cbind
最常用于将对象组合成矩阵。它从输入中剥离特殊属性,以帮助确保它们兼容组合成单个对象。这意味着具有特殊属性(例如因子和日期的名称和格式属性)的数据类型将被简化为它们的基础数字表示形式。这就是 cbind
将您的因素转化为数字的原因。
相反,data.frame()
本身将保留单个对象属性。在这种情况下,您使用 cbind
是不必要的。要保持您的因子水平,只需使用:
SD1 <- data.frame(plantid, year15, year16)
我有这样一个数据框:
> str(dynamics)
'data.frame': 3517 obs. of 3 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ y2015: int 245 129 301 162 123 125 115 47 46 135 ...
$ y2016: int NA 385 420 205 215 295 130 NA NA 380 ...
我把这3个向量拿出来给它们取不同的名字,
第 1 列:
> plantid <- dynamics$id
> head(plantid)
[1] 1 2 3 4 5 6
第 2 列:
(我把它分成了不同的类,标为2,3,4和5)
> y15 <- dynamics$y2015
> year15 <- cut(y15, breaks = c(-Inf, 50, 100, 150, Inf), labels = c("2", "3", "4", "5"))
> str(year15)
Factor w/ 4 levels "2","3","4","5": 4 3 4 4 3 3 3 1 1 3 ...
> head(year15)
[1] 5 4 5 5 4 4
Levels: 2 3 4 5
第 3 列:
(这里也一样)
> y16 <- dynamics$y2016
> year16 <- cut(y16, breaks = c(-Inf, 50, 100, 150, Inf), labels = c("2", "3", "4", "5"))
> str(year16)
Factor w/ 4 levels "2","3","4","5": NA 4 4 4 4 4 3 NA NA 4 ...
> head(year16)
[1] <NA> 5 5 5 5 5
Levels: 2 3 4 5
到目前为止一切顺利!
当我通过cbind()
将上述3个向量组合成一个新的数据框时,问题就出现了,新创建的向量层没有了
看我的代码:
SD1 = data.frame(cbind(plantid, year15, year16))
head(SD1)
我得到这样的数据框:
> head(SD1)
plantid year15 year16
1 1 4 NA
2 2 3 4
3 3 4 4
4 4 4 4
5 5 3 4
6 6 3 4
如您所见,第 2 列和第 3 列的级别已从 2, 3, 4, 5
变回 1, 2, 3, 4
我该如何解决?
cbind
最常用于将对象组合成矩阵。它从输入中剥离特殊属性,以帮助确保它们兼容组合成单个对象。这意味着具有特殊属性(例如因子和日期的名称和格式属性)的数据类型将被简化为它们的基础数字表示形式。这就是 cbind
将您的因素转化为数字的原因。
相反,data.frame()
本身将保留单个对象属性。在这种情况下,您使用 cbind
是不必要的。要保持您的因子水平,只需使用:
SD1 <- data.frame(plantid, year15, year16)