R中的数据帧值连接不按预期工作

时间:2012-01-27 18:28:43

标签: r dataframe

请考虑以下代码:

> 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的值为索引号12 )?

1 个答案:

答案 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]))