You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中对指定列进行透视?偏好tidyverse解决方案

数据透视解决方案(tidyverse实现)

我已多次尝试仍未成功,恳请各位帮忙解决。现有如下数据:

df <- structure(list(type = c("a", "b", "c", "d", "e", "f", "g", "h", 
"i", "j", "k"), female = c(NA, 3, NA, 1, NA, 2, 2, 1, 16, 43, 
10), prop_total_female = c(NA, 0.04, NA, 0.01, NA, 0.03, 0.03, 
0.01, 0.21, 0.55, 0.13), male = c(2, NA, 2, NA, 1, 8, 1, NA, 
11, 34, 12), prop_total_male = c(0.03, NA, 0.03, NA, 0.01, 0.11, 
0.01, NA, 0.15, 0.48, 0.17)), row.names = c(NA, -11L), class = c("tbl_df", 
"tbl", "data.frame"))

数据表格预览:

typefemaleprop_total_femalemaleprop_total_male
aNANA20.03
b30.04NANA
cNANA20.03
d10.01NANA
eNANA10.01
f20.0380.11
g20.0310.01
h10.01NANA
i160.21110.15
j430.55340.48
k100.13120.17

我希望对数据进行透视,将male和female列合并为gender列,将prop_total_female和prop_total_male列合并为prop列,最终得到包含type、gender、prop三列的数据框。偏好使用tidyverse工具的解决方案。

另外,对@user438383说一句:就算你要标记我的问题为重复,也请先给出解决方案再继续你的清闲生活。


解决方案代码

library(tidyverse)

# 执行数据透视转换
result <- df %>%
  pivot_longer(
    cols = -type,
    names_to = c(".value", "gender"),
    # 匹配两种列名格式:直接的性别列(female/male)和带前缀的prop列(prop_total_female/male)
    names_pattern = "(prop_total_)?(female|male)"
  ) %>%
  # 只保留需要的列,并重命名prop_total为prop
  select(type, gender, prop = prop_total) %>%
  # 过滤掉prop为空的无效行
  filter(!is.na(prop))

# 查看结果
print(result)

结果示例

转换后的数据框结构如下(部分行):

typegenderprop
amale0.03
bfemale0.04
cmale0.03
dfemale0.01
emale0.01
ffemale0.03
fmale0.11

内容的提问来源于stack exchange,提问作者aerw4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:06:01