在R语言中同时使用select与as.numeric的方法探究
问题解决:统一列类型后合并数据框
样本数据生成代码
z = data.frame(a = c(1:4),b = as.character(c(1:4)),c = c('s,','d','g','y')) zz = data.frame(a = c(5:8),b = as.numeric(c(5:8)),e = c(2,4,5,6)) zzz = data.frame(a = c(9:12),b = as.numeric(c(9:12)),r = c(4,8,6,5)) z4 = list(z,zz,zzz) lapply(z4,function(x)x %>% select(a,b)) %>% bind_rows
运行错误信息
> lapply(z4,function(x)x %>% select(a,b)) %>% bind_rows Error in `bind_rows()`: ! Can't combine `..1$b` <character> and `..2$b` <double>. Run `rlang::last_error()` to see where the error occurred.
解决方案:同时使用select和as.numeric实现合并
完全可以。报错根源是各数据框的b列类型不统一:第一个数据框中b是字符型,后两个是数值型,而bind_rows要求合并的同列必须类型一致。
我们可以在处理每个数据框时,同时完成选列和类型转换,让所有b列统一为数值型,修改后的代码如下:
library(dplyr) z = data.frame(a = c(1:4),b = as.character(c(1:4)),c = c('s,','d','g','y')) zz = data.frame(a = c(5:8),b = as.numeric(c(5:8)),e = c(2,4,5,6)) zzz = data.frame(a = c(9:12),b = as.numeric(c(9:12)),r = c(4,8,6,5)) z4 = list(z,zz,zzz) # 先选列再转换b列类型,确保所有数据框列类型一致 lapply(z4, function(x) { x %>% select(a, b) %>% mutate(b = as.numeric(b)) }) %>% bind_rows
这段代码中,每个数据框先通过select保留a和b列,再用mutate把b列统一转换成数值型,之后bind_rows就能顺利完成合并,不会再出现类型不兼容的错误。
内容的提问来源于stack exchange,提问作者doraemon
相关产品推荐
相关产品推荐

