如何在R语言中为多列data.frame添加首列指定值其余列为'-'的新行
解决方法
方法1:用dplyr构造匹配列数的行
先创建一个和原数据集列数完全匹配的行,首列设为TORONTO,剩下的所有列统一用'-'填充,再通过bind_rows合并:
library(dplyr) # 生成要添加的行:首列值为TORONTO,其余列都是'-',并匹配原数据列名 new_row <- setNames(c("TORONTO", rep("-", ncol(mydata)-1)), colnames(mydata)) # 将新行追加到原数据集 mydata <- mydata %>% bind_rows(new_row)
方法2:结合tibble的自动扩展特性(更简洁)
利用tibble对长度为1的向量自动扩展的特性,不用手动计算列数:
library(dplyr) library(tibble) mydata <- mydata %>% bind_rows( tibble( Column1 = "TORONTO", !!!setNames(rep("-", ncol(mydata)-1), colnames(mydata)[-1]) ) )
方法3:基础R实现(无需tidyverse包)
如果不想用tidyverse系列包,用基础R的rbind也能实现:
# 构造新行并匹配列名 new_row <- as.data.frame(t(c("TORONTO", rep("-", ncol(mydata)-1)))) colnames(new_row) <- colnames(mydata) # 合并到原数据集 mydata <- rbind(mydata, new_row)
为什么你之前的代码失败?
- 第一个代码只指定了
Column1的值,bind_rows会把未指定的列自动填充为NA,所以其余列不会变成'-'。 - 第二个代码语法错误:
col(2:ncol)不是合法的列名写法,而且bind_rows的参数格式不正确,不能这样直接指定列范围赋值。
内容的提问来源于stack exchange,提问作者T K
相关产品推荐
相关产品推荐

