簡體   English   中英

協助在 R 中重塑密集的縱向數據

[英]Assistance with reshaping intensive longitudinal data in R

如果我沒有正確發布,請見諒。 我是 R 新手,這是我在 stackoverflow 上的第一篇文章。 我已經盡可能多地閱讀以找到解決我問題的方法,但一直找不到我可以使用的東西。

我有一些我正在嘗試重塑的密集縱向數據。 目前它是寬格式的,看起來像這樣:

Participant   D1_1_1   D1_1_2   D1_1_3   D1_1_4    D2_1_1   D2_1_2  etc...
P1               6        2        3        5        1         2
P2               4        9        3        6        4         1
P3               7        4        2        8        1         1
P4               1        5        1        1        6         7 
P5               2        0        8        2        1         4
etc..

列變量是指在一天中的特定時間對特定調查項目做出的響應。

所以:

D1_1_1 = 第 1 天,時間 1,項目 1

D1_1_2 = 第 1 天,時間 1,項目 2

...

D4_3_7 = 第 4 天,時間 3,項目 7

總的來說,我擁有的數據涵蓋:60 名參與者,他們對 11 個項目做出了回應,每天 4 次,持續 10 天(每個參與者總共 440 個數據點)。

我希望獲得有關能夠有效地將其處理為長格式的幫助,例如,它看起來像這樣:

Participant     Day     time    item 1   item 2 ... item 11
P1               1        1        6        2
P1               1        2        X        X
P1               1        3        X        X
P1               1        4        X        X
P1               2        1        1        4
etc..

其中 X 是參與者在特定日期、特定時間對給定調查項目的響應。

任何幫助將非常感激!

干杯

Ronak 的答案完美無缺,但不需要使用extractpivot_longer已經可以將列分成幾個:

library(tidyr)

df %>%
  pivot_longer(cols = -Participant, names_to = c("day", "time", "item"), 
               names_pattern = "(D\\d)_(\\d)_(\\d)") %>%
  pivot_wider(names_from = item, values_from = value, names_prefix = "Item")
#> # A tibble: 10 x 7
#>    Participant day   time  Item1 Item2 Item3 Item4
#>    <fct>       <chr> <chr> <int> <int> <int> <int>
#>  1 P1          D1    1         6     2     3     5
#>  2 P1          D2    1         1     2    NA    NA
#>  3 P2          D1    1         4     9     3     6
#>  4 P2          D2    1         4     1    NA    NA
#>  5 P3          D1    1         7     4     2     8
#>  6 P3          D2    1         1     1    NA    NA
#>  7 P4          D1    1         1     5     1     1
#>  8 P4          D2    1         6     7    NA    NA
#>  9 P5          D1    1         2     0     8     2
#> 10 P5          D2    1         1     4    NA    NA

數據:

df <- structure(list(Participant = structure(1:5, .Label = c("P1", 
"P2", "P3", "P4", "P5"), class = "factor"), D1_1_1 = c(6L, 4L, 
7L, 1L, 2L), D1_1_2 = c(2L, 9L, 4L, 5L, 0L), D1_1_3 = c(3L, 3L, 
2L, 1L, 8L), D1_1_4 = c(5L, 6L, 8L, 1L, 2L), D2_1_1 = c(1L, 4L, 
1L, 6L, 1L), D2_1_2 = c(2L, 1L, 1L, 7L, 4L)), class = "data.frame", 
row.names = c(NA, -5L))

這是使用pivot_longer + pivot_wider一種方式

library(dplyr)
library(tidyr)

pivot_longer(df, cols = -Participant, names_to = c("Day", "Time", "Item"), 
                 names_pattern = "D(\\d+)_(\\d+)_(\\d+)") %>%
    mutate(Item = paste0("Item",Item)) %>%
    pivot_wider(names_from = Item, values_from = value)

# A tibble: 10 x 7
#   Participant Day   Time  Item1 Item2 Item3 Item4
#   <fct>       <chr> <chr> <int> <int> <int> <int>
# 1 P1          1     1         6     2     3     5
# 2 P1          2     1         1     2    NA    NA
# 3 P2          1     1         4     9     3     6
# 4 P2          2     1         4     1    NA    NA
# 5 P3          1     1         7     4     2     8
# 6 P3          2     1         1     1    NA    NA
# 7 P4          1     1         1     5     1     1
# 8 P4          2     1         6     7    NA    NA
# 9 P5          1     1         2     0     8     2
#10 P5          2     1         1     4    NA    NA

我們也可以使用與names_pattern中的pivot_longer相同的模式使用extract

pivot_longer(df, cols = -Participant) %>%
     extract(name, into = c("Day", "Time", "Item"), 
             regex = "D(\\d+)_(\\d+)_(\\d+)") %>%
     pivot_wider(names_from = Item, values_from = value)

數據

df <- structure(list(Participant = structure(1:5, .Label = c("P1", 
"P2", "P3", "P4", "P5"), class = "factor"), D1_1_1 = c(6L, 4L, 
7L, 1L, 2L), D1_1_2 = c(2L, 9L, 4L, 5L, 0L), D1_1_3 = c(3L, 3L, 
2L, 1L, 8L), D1_1_4 = c(5L, 6L, 8L, 1L, 2L), D2_1_1 = c(1L, 4L, 
1L, 6L, 1L), D2_1_2 = c(2L, 1L, 1L, 7L, 4L)), class = "data.frame", 
row.names = c(NA, -5L))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM