问题描述
我的数据框具有以下结构:
起始值 | 中间值 | 最终价值 | 关系 |
---|---|---|---|
A | B | C | 降低,降低 |
A | D,E | C | 降低,提高,提高 |
我正在尝试格式化数据,以便我最终得到:
起始值 | 关系 | 最终价值 |
---|---|---|
A | 降低 | B |
B | 降低 | C |
A | 降低 | D |
D | 加注 | E |
E | 加注 | C |
我一直在努力像这样格式化我的数据。起初我尝试了 tidyr separator_rows() 和某种形式的 reshape2 和 data.table 融合数据,但无济于事。有什么建议吗?
解决方法
我们可以unite
列然后用separate_rows
分割列
library(dplyr)
library(tidyr)
df1 %>%
unite(StartValue,StartValue,MiddleValue,sep=",",remove = FALSE) %>%
unite(FinalValue,FinalValue,") %>%
separate_rows(c(StartValue,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))