为何预定义类型的R数据框添加行后变量类型变为字符型?
为什么指定列类型的空data.frame添加行后全列变字符型?
我创建了一个指定各列变量类型的空data.frame,包含character类型的key列、double类型的mean和std列、integer类型的count列。执行下面的代码添加一行数据后,所有列的类型都变成了character类型,这是为什么?
df <- data.frame(key = character(), mean = double(), std = double(), count = integer(), stringsAsFactors = FALSE) a <- "a" b <- 1.22 c <- 2.33 d <- 3 df[nrow(df)+1,]<- c(a, b,c,d)
原因解析
问题核心出在c(a, b, c, d)这个操作上:
- R的向量只能存储同一种数据类型,当你混合字符型和数值型元素构建向量时,R会自动做类型转换——把所有元素转换成兼容性最强的类型,也就是字符型(因为字符型可以包含数值的文本形式,反过来数值型无法容纳字符)。
- 当你把这个全字符型的向量赋值给data.frame的一行时,data.frame的每一列都会被强制适配这个向量的类型,最终所有列都变成了字符型。
正确的添加方法
要保留各列的原始类型,推荐两种方式:
- 用
rbind将新数据构造成data.frame后合并:
df <- rbind(df, data.frame(key = a, mean = b, std = c, count = d, stringsAsFactors = FALSE))
- 用列表赋值,因为列表可以保留不同数据类型:
df[nrow(df)+1,] <- list(a, b, c, d)
内容的提问来源于stack exchange,提问作者Elizabeth
相关产品推荐
相关产品推荐

