如何基于某列值合并数据框观测值并将变量转为新列
解决方案
可以用tidyr包的pivot_wider()函数实现这个转换,配合dplyr的rename()能匹配你想要的列名格式:
library(tidyr) library(dplyr) # 原始数据 v1 <- c("Bob", "Bob", "Fred", "Fred") v2 <- c("Age", "KG", "Age", "KG") v3 <- c(25, 80, 30, 90) df <- data.frame(v1,v2,v3) # 转换为目标宽表格式 df_wide <- df %>% pivot_wider(id_cols = v1, names_from = v2, values_from = v3) %>% rename(V1 = v1) df_wide
运行后输出结果:
V1 Age KG 1 Bob 25 80 2 Fred 30 90
参数说明
id_cols = v1:指定作为行唯一标识的列(这里是人名列)names_from = v2:指定要转换为新列名的列(这里的Age、KG会成为新表头)values_from = v3:指定填充新列数据的来源列(这里的年龄、体重数值)rename(V1 = v1):将原始列名v1修改为目标格式的V1,不需要的话可以省略这一步
内容的提问来源于stack exchange,提问作者user3334472
相关产品推荐
相关产品推荐

