如何匹配数据框列名与类别向量并添加类别行至数据框
问题与解决方案
需求说明
将数据集data的列名与category_vector中的Name列匹配,为data每一列分配对应的Category值,再把这些类别值作为第一行添加到data中。
原始代码
data <- rbind(c(1,2,3,4,5,6), c(1,2,3,4,5,6), c(1,2,3,4,5,6)) colnames(data) <- c("A", "B", "C", "D", "E", "F") category_vector <- cbind(c("A", "B", "C", "D", "E"), c("Cat1", "Cat2", "Cat3", "Cat2", "Cat5")) colnames(category_vector) <- c("Name", "Category")
期望输出
output <- rbind(c("Cat1", "Cat2", "Cat3", "Cat2", "Cat5", "NA"), c(1,2,3,4,5,6), c(1,2,3,4,5,6), c(1,2,3,4,5,6)) colnames(output) <- colnames(data)
实现方案
完整代码
# 匹配列名与Name列,提取对应Category值 category_row <- category_vector[match(colnames(data), category_vector[, "Name"]), "Category"] # 把未匹配到的NA转为字符型"NA" category_row[is.na(category_row)] <- "NA" # 将类别行添加到data最前方 output <- rbind(category_row, data) # 保持原列名不变 colnames(output) <- colnames(data)
代码解释
match(colnames(data), category_vector[, "Name"]):返回data列名在category_vector$Name中的位置索引,无匹配项返回NAcategory_vector[..., "Category"]:根据索引提取对应类别值,未匹配位置自动为NArbind(category_row, data):将类别行作为首行合并到原数据集,此时整个数据集会转为字符型(符合期望输出的格式要求)
内容的提问来源于stack exchange,提问作者Jak Carty
相关产品推荐
相关产品推荐

