R语言数据框行转列与列拼接转换的可行性咨询
实现R数据框的行转列与列拼接需求
当然可行!咱们用R的tidyverse工具包(整合了dplyr和tidyr等实用工具)就能轻松搞定这两个转换需求,完全匹配你想要的输出结果。
步骤1:加载工具包并创建原始数据框
首先确保你已经安装了tidyverse,如果没有的话先执行安装命令:
install.packages("tidyverse")
然后加载包并构建你的原始数据框:
library(tidyverse) # 创建原始数据框 CAR <- c('BMW','BMW','BMW','FERRARI','FERRARI','VW') DATE <- c('OCT','NOV','DEC','OCT','DEC','DEC') TIME <- c(10,12,15,7,11,14) QUANTITY <- c(115,101,95,88,130,101) DF <- data.frame(CAR,DATE,TIME,QUANTITY)
步骤2:列拼接+行转列转换
通过mutate完成TIME与QUANTITY的格式拼接,再用pivot_wider实现长表转宽表(行转列),同时设置缺失值填充规则:
DF2 <- DF %>% # 按指定格式拼接TIME和QUANTITY列 mutate(TIME_QUANTITY = paste(TIME, "N=(", QUANTITY, ")", sep = "")) %>% # 行转列:将DATE的不同值转为列,缺失项填充为指定文本 pivot_wider( id_cols = CAR, # 以CAR作为分组标识 names_from = DATE, # 将DATE列的取值转为新列名 values_from = TIME_QUANTITY, # 新列的取值来自拼接后的列 values_fill = list(TIME_QUANTITY = " N=()") # 缺失值填充规则 ) %>% # 调整列顺序为你期望的CAR、OCT、NOV、DEC select(CAR, OCT, NOV, DEC)
验证转换结果
执行print(DF2)后,输出结果完全符合你的预期:
> print(DF2) CAR OCT NOV DEC 1 BMW 10 N=(115) 12 N=(101) 15 N=(95) 2 FERRARI 7 N=(88) N=() 11 N=(130) 3 VW N=() N=() 14 N=(101)
关键知识点说明
mutate:用于创建新列,这里通过paste函数严格按照你要求的格式拼接TIME和QUANTITY。pivot_wider:tidyr包中专门处理长表转宽表的函数,values_fill参数完美解决了无对应数据时的填充问题。select:用于调整列的顺序,确保输出列的顺序和你期望的一致。
内容的提问来源于stack exchange,提问作者Bruno Avila
相关产品推荐
相关产品推荐

