【发布时间】:2021-04-26 15:02:21
【问题描述】:
这是一个有点棘手的数据集,其中列的布局是这样的。
ID C.Date T.Date C(Area) T(Area) Level(closet)_1 Venti_1 Level(closet)_2 Venti_2
733 2013.06.18 2013.06.18 65.2 42.1 C6 0 C3 1
537 2015.10.01 2015.15.01 34.5 27.2 C3 0 T11 0
909 2016-01-14 2016-01-14 15.1 25.9 T4 1 T2 1
规则
Step1 : Consider columns: ID, C.Date, C(Area), Level(closet)_1, Venti_1, Level(closet)_2, Venti_2
Rearrange the data like this.
ID Index Date Ref.Level Area Level(closet) Venti
733 1 2013.06.18 C 65.2 C6 0
733 2 2013.06.18 C 65.2 C3 1
Step2 : Consider columns: ID, T.Date, T(Area), Level(closet)_1, Venti_1, Level(closet)_2, Venti_2
Rearrange the data like this.
ID Index Date Ref.Level Area Level(closet) Venti
733 3 2013.06.18 T 42.1 NA NA
请注意,Step1 和 Step2 都引用了 Level(closet)_1, Venti_1, Level(closet)_2, Venti_2 列中的值。区别在于步骤 2,当有 T.Date 和 T(Area) 的值时,期望 Level(closet) 值中的任何一个都将以 T* 开头,在第一个 ID 733 中没有 NONE。因此,转换后的数据集第 3 行的列 Level(closet), Venti 的值为 NA。第二个 ID 537 再次同时具有 T.Date 和 T(Area) 值,再次基于 Step2 我们查找以 T* 开头的 Level(closet) 列值,在这种情况下,Level(closet)_2 包含值 T11 所以对于宽ID 523 的 -to-long 转换数据将是
Step1:考虑列:ID、C.Date、C(Area)、Level(closet)_1、Venti_1、Level(closet)_2、Venti_2 像这样重新排列数据。
ID Index Date Ref.Level Area Level(closet) Venti
537 1 2015.10.01 C 34.5 C3 0
Step2:考虑列:ID、T.Date、T(Area)、Level(closet)_1、Venti_1、Level(closet)_2、Venti_2 像这样重新排列数据。
ID Index Date Ref.Level Area Level(closet) Venti
537 2 2015.15.01 T 27.2 T11 0
最终的预期数据集如下所示
ID Index Date Ref.Level Area Level(closet) Venti
733 1 2013.06.18 C 65.2 C6 0
733 2 2013.06.18 C 65.2 C3 1
733 3 2013.06.18 T 42.1 NA NA
537 1 2015.10.01 C 34.5 C3 0
537 2 2015.15.01 T 27.2 T11 0
909 1 2016-01-14 C 15.1 NA NA
909 2 2016-01-14 T 25.9 T4 1
909 3 2016-01-14 T 25.9 T2 1
抱歉,这有点复杂。从表面上看,这看起来像是在宽格式中取几行并将其重新整形为长格式,但是有一个嵌套的 ifelse 来查看Level(closet) 列中是否有任何以T* 开头的值。我完全空白如何以这样的长格式构造它。任何帮助或建议都非常有用。谢谢。
图书馆(tidyverse)
df <- tibble::tribble(~`ID`, ~`C.Date`, ~`T.Date`, ~`C(Area)`, ~`T(Area)`, ~`Level(closet)_1`, ~`Venti_1`, ~`Level(closet)_2`, ~`Venti_2`,
"733", "2013.06.18", "2013.06.18", "65.2", "42.1", "C6", "0", "C3", "1",
"537", "2015.10.01", "2015.15.01", "34.5", "27.2", "C3", "0", "T11", "0",
"909", "2016-01-14", "2016-01-14", "15.1", "25.9", "T4", "1", "T2", "1"
)
【问题讨论】:
-
您能否提供一个可重现的小数据示例?
-
@deschen,用数据更新了问题
标签: r reshape tidyr melt data-transform