如何将R语言data数据框转换为new_data?已试pivot_longer和pivot_wider未果
解决方案
可以通过pivot_longer配合pivot_wider完成转换,步骤如下:
1. 加载tidyverse包
如果未安装包,先执行安装:
install.packages("tidyverse")
加载包:
library(tidyverse)
2. 执行转换
# 原数据 data <- data.frame( ind = c("la", "lb", "lc"), c1 = c(1, 2, 3), c2 = c(4, 5, 6), c3 = c(7, 8, 9), c4 = c(10, 11, 12) ) # 转换流程 new_data <- data %>% # 将c1-c4列转为长格式,列名存入new_ind,对应值存入value pivot_longer(cols = c(c1, c2, c3, c4), names_to = "new_ind", values_to = "value") %>% # 将原ind列的内容转为新列名,用value填充对应值 pivot_wider(names_from = ind, values_from = value) %>% # 重命名列并调整顺序 rename(ind = new_ind) %>% select(ind, la, lb, lc)
3. 验证结果
运行代码后,new_data结构与预期一致:
> new_data ind la lb lc 1 c1 1 2 3 2 c2 4 5 6 3 c3 7 8 9 4 c4 10 11 12
另一种base R方法
若不想使用tidyverse,可通过转置实现:
new_data <- as.data.frame(t(data[, -1])) colnames(new_data) <- data$ind new_data$ind <- rownames(new_data) rownames(new_data) <- NULL new_data <- new_data[, c("ind", "la", "lb", "lc")]
内容的提问来源于stack exchange,提问作者dia05
相关产品推荐
相关产品推荐

