R语言中用as.data.frame转换列表时列名被修改的解决方法
解决R语言列表转data.frame时列名带前缀的问题
当你用as.data.frame()转换带命名的data.frame列表时,默认会给列名加上列表元素的名称前缀——这是R为避免列名冲突的默认行为。要保留原列表元素名称的同时让列名保持原样,有两种简单方法:
方法1:使用do.call(cbind, total)
直接用cbind合并列表中的data.frame,不会添加前缀,同时原列表total的命名完全保留,不影响后续操作:
emp.data <- data.frame( emp_id = c(1:5), emp_name = c("Rick","Dan","Michelle","Ryan","Gary")) emp.data2 <- data.frame( emp_id2 = c(1:5), emp_name2 = c("Rick","Dan","Michelle","Ryan","Gary")) total <- list("emp.data" = emp.data, "emp.data2" = emp.data2) # 生成不带前缀的data.frame,原total列表命名保留 total_df <- do.call(cbind, total) # 查看列名 colnames(total_df) # 输出:[1] "emp_id" "emp_name" "emp_id2" "emp_name2"
方法2:as.data.frame结合unname()
如果更习惯用as.data.frame(),可以先对列表取无命名版本再转换,原列表的命名依然保留:
total_df <- as.data.frame(unname(total)) # 查看列名 colnames(total_df) # 输出:[1] "emp_id" "emp_name" "emp_id2" "emp_name2"
这两种方法都能让转换后的data.frame列名保持原data.frame的列名,同时原列表total的元素名称完全保留,不影响你后续的其他操作。
内容的提问来源于stack exchange,提问作者user12973562
相关产品推荐
相关产品推荐

