首页 > 解决方案 > R中基于行关系值的数据拆分

问题描述

我的数据框具有以下结构:

起始值 中间值 终值 关系
一个 C 降低,降低
一个 D、E C 降低,提高,提高

我正在尝试格式化数据,以便最终得到:

起始值 关系 终值
一个 降低
降低 C
一个 降低 D
D 提高
提高 C

我一直在努力像这样格式化我的数据。起初我尝试了 tidyr separate_rows() 和某种形式的 reshape2 和 data.table 融合数据,但无济于事。有什么建议么?

标签: rdataframedata.tablereshapetidyr

解决方案


我们可以unite列然后拆分列separate_rows

library(dplyr)
library(tidyr)
df1 %>% 
  unite(StartValue, StartValue, MiddleValue, sep=", ", remove = FALSE) %>%
  unite(FinalValue, MiddleValue, FinalValue, sep=", ") %>% 
  separate_rows(c(StartValue, FinalValue, Relationship))

-输出

# A tibble: 5 x 3
#  StartValue FinalValue Relationship
#  <chr>      <chr>      <chr>       
#1 A          B          lowers      
#2 B          C          lowers      
#3 A          D          lowers      
#4 D          E          raises      
#5 E          C          raises        

数据

df1 <- structure(list(StartValue = c("A", "A"), MiddleValue = c("B", 
"D, E"), FinalValue = c("C", "C"), Relationship = c("lowers, lowers", 
"lowers, raises, raises")), class = "data.frame", row.names = c(NA, 
-2L))

推荐阅读