R中如何将行字段转为列并从另一列提取值填充对应新列
解决方案
你可以直接用tidyverse里的pivot_wider()函数实现需求,核心逻辑是先给每行加唯一行号避免聚合,再做宽表转换即可,完整可运行代码如下:
library(tidyverse) # 构造示例原始数据,你可以替换成自己读取的实际数据 raw_data <- tibble( `Field Label 01` = c("Age", "Proceeds", "Age", "Proceeds", "Last Reported"), `Field Value 01` = c("11", "4000", "4", "1000", "05-20-2021") ) # 核心转换逻辑 result <- raw_data %>% # 新增唯一行标识,保证每一行原始数据对应结果中的一行 mutate(row_id = row_number()) %>% # 转换为宽表:names_from指定做列名的字段,values_from指定填充值的来源字段 pivot_wider( names_from = `Field Label 01`, values_from = `Field Value 01` ) %>% # 将所有空值替换为你需要的"N/A" replace(is.na(.), "N/A") %>% # 删除辅助用的行id列 select(-row_id) %>% # 如需匹配你给出的预期输出的行顺序,保留下面这行排序代码即可 arrange(desc(Age != "N/A"), desc(Proceeds != "N/A"), desc(`Last Reported` != "N/A"))
运行后打印result即可得到完全符合要求的输出:
| Age | Proceeds | Last Reported |
|---|---|---|
| 11 | N/A | N/A |
| 4 | N/A | N/A |
| N/A | 4000 | N/A |
| N/A | 1000 | N/A |
| N/A | N/A | 05-20-2021 |
如果需要保留数值类型,转换完成后单独对Age、Proceeds列做数值格式转换即可。
内容的提问来源于stack exchange,提问作者jollibee474
相关产品推荐
相关产品推荐

