R 在两个不同的行中分别显示两个不同日期的结果

R 在两个不同的行中分别显示两个不同日期的结果,r,database,date,row,panel,R,Database,Date,Row,Panel,我觉得这个标题很难理解。我会给你一个适当的例子,说明我拥有什么和我想要什么 我有大量的观察数据,表明治疗前后患者的ID和一些结果(如工资和工时) ID Wage_{t} Wage_{t-1} Hours_{t} Hours_{t-1} Establishment Brain 34563 34563 45 43 X1 Lucke 2545 2356 35

我觉得这个标题很难理解。我会给你一个适当的例子,说明我拥有什么和我想要什么

我有大量的观察数据,表明治疗前后患者的ID和一些结果(如工资和工时)

ID         Wage_{t}  Wage_{t-1}   Hours_{t}   Hours_{t-1}  Establishment
Brain      34563     34563        45          43            X1
Lucke      2545      2356         35          36            E3
Jasmine    26789     1345         42          44            E3
Leila      1000      1234         38          39            E3
Sophie     35421     23453        50          57            Y6

我想将治疗前后的观察结果按行分开,并用一个虚拟变量表示治疗前后的观察结果,如果观察结果在以下情况下为1:

ID         Wage    Hours         Establishment   After_dummy
Brain      34563   43            X1              0
Brain      34563   45            X1              1
Lucke      2356    36            E3              0
Lucke      2545    35            E3              1
Jasmine    1345    44            E3              0
Jasmine    26789   42            E3              1
Leila      1234    39            E3              0
Leila      1000    38            E3              1
Sophie     23453   57            Y6              0
Sophie     35421   50            Y6              1



应修改带有大括号和连字符的列名。此外,还可以在列名中包含所需的“虚拟”值。这将使您更容易使用类似于
pivot\u longer
的工具将数据重塑为长格式

在这种情况下,
Wage\u t\u 1
将表示
Wage\u{t}
,其值为1

library(tidyverse)

names(df) <- c("ID", "Wage_t_1","Wage_t_0", "Hours_t_1", "Hours_t_0", "Establishment")

pivot_longer(df,
             cols = -c(ID, Establishment), 
             names_to = c(".value", "after_dummy"),
             names_pattern = "(Wage|Hours)_t_(\\d+)")
库(tidyverse)

姓名(df)好的,谢谢!
   ID      Establishment after_dummy  Wage Hours
   <chr>   <chr>         <chr>       <int> <int>
 1 Brain   X1            1           34563    45
 2 Brain   X1            0           34563    43
 3 Lucke   E3            1            2545    35
 4 Lucke   E3            0            2356    36
 5 Jasmine E3            1           26789    42
 6 Jasmine E3            0            1345    44
 7 Leila   E3            1            1000    38
 8 Leila   E3            0            1234    39
 9 Sophie  Y6            1           35421    50
10 Sophie  Y6            0           23453    57
df <- structure(list(ID = c("Brain", "Lucke", "Jasmine", "Leila", "Sophie"
), Wage_t_1 = c(34563L, 2545L, 26789L, 1000L, 35421L), Wage_t_0 = c(34563L, 
2356L, 1345L, 1234L, 23453L), Hours_t_1 = c(45L, 35L, 42L, 38L, 
50L), Hours_t_0 = c(43L, 36L, 44L, 39L, 57L), Establishment = c("X1", 
"E3", "E3", "E3", "Y6")), class = "data.frame", row.names = c(NA, 
-5L))