我得到了以下数据:
A<-tibble::tribble(
~ID, ~NR, ~INDX.DATE, ~REOP_DATE, ~REC, ~TYPE1, ~TYPE2, ~TYPE3, ~TYPE4,
1L, 1234L, "2012-11-04", "2013-12-31", "YES", NA, NA, NA, NA,
1L, NA, NA, "2015-01-01", "NO", 0L, 0L, 1L, 0L,
1L, NA, NA, "2015-02-02", "YES", NA, NA, NA, NA,
1L, NA, NA, "2016-01-01", "NO", 1L, 0L, 0L, 0L,
2L, NA, NA, NA, NA, NA, NA, NA, NA,
3L, NA, NA, NA, NA, NA, NA, NA, NA
)
它看起来像这样:
# A tibble: 6 × 9
ID NR INDX.DATE REOP_DATE REC TYPE1 TYPE2 TYPE3 TYPE4
<int> <int> <chr> <chr> <chr> <int> <int> <int> <int>
1 1 1234 2012-11-04 2013-12-31 YES NA NA NA NA
2 1 NA NA 2015-01-01 NO 0 0 1 0
3 1 NA NA 2015-02-02 YES NA NA NA NA
4 1 NA NA 2016-01-01 NO 1 0 0 0
5 2 NA NA NA NA NA NA NA NA
6 3 NA NA NA NA NA NA NA NA
但我想把它重新塑造成这样:
ID NR INDX.DATE REC1_DATE REC2_DATE REOP1_DATE REOP1_TYPE REOP2_DATE REOP2_TYPE
<int> <int> <chr> <chr> <chr> <chr> <int> <chr> <int>
1 1 1234 2012-11-04 2013-12-31 2015-02-02 2015-01-01 3 2016-01-01 1
2 2 NA NA NA NA NA NA NA NA
3 3 NA NA NA NA NA NA NA NA
我一直在研究tidyr
和pivot_wider
,但我不知道如何动态地制作列。
2条答案
按热度按时间pu82cl6c1#
你的数据很混乱,所以你可能想改变它的结构,但是这里有一个方法来恢复你的最终输出。注意它需要
dplyr 1.1.0
,但是你可以用group_by
函数改变.by
参数。第一组
mutate
只是为了获得一个tidy
er Dataframe 。您可以检查here我所说的整洁是什么意思,但这对pivot_wider
来说更容易理解。然后,我为每组每行创建一个id
,然后为数据创建一个pivot
。最后,我删除了所有只包含NA的列(无有用信息),并将每组数据总结在一行中:ffx8fchx2#
为了解决这个问题,我需要掌握我所有的知识。这个解决方案冗长而不是很优雅: