请考虑以下代码:
> a <- data.frame(name=c('a','b','c'))
> b <- data.frame(type=a$name[1])
> c <- data.frame(type=c(a$name[1],a$name[2]))
> b
type
1 a
> c
type
1 1
2 2
为什么b$type
的值为a
,实际分配的值,而c$type
的值为索引号1
和2
)?
答案 0 :(得分:4)
好吧,$ name是因子,而不是字符向量,你不能连接那样的因素(因为c
函数当前不处理因子)。因子实际上是具有levels
属性(和类)的整数向量,因此c
函数只使用整数值。这可能被视为一个错误。
组合因子的一种方法是使用unlist
,它具有针对这种情况的特殊代码:
c <- data.frame(type=unlist(list(a$name[1], a$name[2])))
另一种方法是转换为字符向量:
c <- data.frame(type=c(as.character(a$name[1]), as.character(a$name[2])))
第三种方法是从头开始使用字符向量:
a <- data.frame(name=c('a','b','c'), stringsAsFactors=FALSE)
c <- data.frame(type=c(a$name[1],a$name[2]))