如何在R中将列名追加至对应列的每个观测值末尾?
在R中为数据框列值追加对应列名的方法
示例数据框
先构造一个匹配你需求的示例数据,方便测试代码:
df <- data.frame( Soccer_Brand = c("Adidas", "Nike", "Puma"), Basketball_Brand = c("Nike", "Under Armour", "Adidas"), stringsAsFactors = FALSE )
方法1:使用dplyr(tidyverse生态)
适合习惯tidy语法的用户,代码简洁易读:
library(dplyr) df_updated <- df %>% mutate(across(everything(), ~paste(.x, cur_column(), sep = "_")))
across(everything())遍历数据框所有列cur_column()获取当前处理列的列名paste()将列值与列名用下划线拼接
方法2:基础R实现(无需额外包)
如果不想加载第三方包,用基础R即可完成:
df_updated <- data.frame( lapply(names(df), function(col) paste(df[[col]], col, sep = "_")), stringsAsFactors = FALSE ) # 可选:保留原列名 names(df_updated) <- names(df)
方法3:data.table(适合大数据集)
处理百万级以上数据时,data.table的效率更高:
library(data.table) setDT(df) for (col in names(df)) { df[[col]] <- paste(df[[col]], col, sep = "_") }
输出结果示例
运行上述代码后,示例数据框会被修改为:
| Soccer_Brand | Basketball_Brand |
|---|---|
| Adidas_Soccer_Brand | Nike_Basketball_Brand |
| Nike_Soccer_Brand | Under Armour_Basketball_Brand |
| Puma_Soccer_Brand | Adidas_Basketball_Brand |
适配购物篮分析的后续处理
如果需要转成适合购物篮分析的格式,可以用tidyr转成长格式:
library(tidyr) basket_data <- df_updated %>% pivot_longer(everything(), values_to = "item") %>% select(item)
内容的提问来源于stack exchange,提问作者chrundlethegreat
相关产品推荐
相关产品推荐

