R语言中将dataframe指定行转为新列的问题求助
R语言行转列生成blub数据框解决方案
方案1:tidyverse实现(推荐)
首先加载依赖包:library(tidyverse)
执行转换代码:
blub <- big_data %>% pivot_wider( id_cols = c(col1, col2), # 替换为你数据中不需要转置的固定列 names_from = i, # 新列名取自i字段的取值 values_from = value # 新列的值取自对应数值字段,替换为你的实际列名 )
方案2:Base R原生实现
无需加载第三方包,使用reshape函数完成转换:
blub <- reshape( big_data, idvar = c("col1", "col2"), # 替换为实际固定列名 timevar = "i", direction = "wide" ) # 清理列名,移除默认的字段前缀 colnames(blub) <- gsub("^.*\\.", "", colnames(blub))
循环写法修正方案
如果你需要保留循环实现逻辑,可参考以下修正后的代码:
# 初始化blub,先提取所有唯一的固定维度行 blub <- unique(big_data[,c("col1","col2")]) # 遍历所有i的取值生成新列 for(i_val in unique(big_data$i)){ sub_data <- big_data[big_data$i == i_val,] blub[[as.character(i_val)]] <- sub_data$value[match( do.call(paste, blub[,c("col1","col2")]), do.call(paste, sub_data[,c("col1","col2")]) )] }
注意事项
- 若同一固定列+i取值组合存在多个重复值,可在pivot_wider中添加
values_fn = list(value = sum)/values_fn = list(value = mean)指定聚合规则,避免生成列表列 - 所有代码中的
col1、col2、value均为示例字段,需替换为你的big_data中的实际列名
内容的提问来源于stack exchange,提问作者B de Blup
相关产品推荐
相关产品推荐

