簡體   English   中英

對於每個主題具有多行的數據,將縱向值重塑為寬

[英]Reshaping longitudinal value to wide, for data with multiple rows per subject

R:從長到寬重塑數據,包括日期

(我試圖包含數據,但格式太糟糕了,我放棄了)。

我有一個關於重塑縱向數據的問題。 訣竅是每個主題我都有多行('row_num' 范圍從 1 到 8)。

我已經查看了 20 多個 Stack Overflow 頁面、其他一些頁面以及 Hadley 的關於重塑的帖子(和文章),似乎我找不到一個差距:

我每個主題有多行,但不知道如何將其變成一行。 訣竅是我需要把(比如)Q1,...,Q5 變成兩個或更多的問題(Q1.1,...,Q5.1,Q1.2,...Q5 .2, ...)

使用一個術語,'row_num' 是一個主體內變量,一切似乎都基於主體間變量。

這讓我感到困惑和沮喪,因為恕我直言,經典的縱向到寬的情況 = 每個主題多行(帶有一個變量塊)到每個主題一行(帶有多個變量塊)。

有人可以指導我找到一些涵蓋此內容的答案或教程嗎?

非常感謝!

編輯后,原始數據框的 dput 如下所示:

# A tibble: 6 x 9
  Subject_ID row_num Date          Q1 Q2_text       Q3    Q4    Q5 Q6_text      
       <dbl>   <dbl> <date>     <dbl> <chr>      <dbl> <dbl> <dbl> <chr>        
1          1       1 2019-01-01     4 Because        5     5     1 and so on    
2          1       2 2019-01-02     1 O, bother      5     4     1 NA           
3          1       3 2019-01-03     2 NA             3     4    NA NA           
4          2       1 2018-12-04    NA NA             1     4     1 NA           
5          3       1 2018-12-15     3 In addtion     5    NA     3 NA           
6          3       2 2018-12-26     1 NA             4     3     2 in conclusion

如果您提供一些示例數據,我們可以提供幫助。 網絡上充滿了使用以下功能的教程,這些功能可以執行您感興趣的操作:

來自tidyr包的gather()spread()

來自reshape2包的melt()dcast()

這是使用tidyr的方法。

library(tidyr)
df2 <- df %>%
  # (optional) First convert all the data columns to text so 
  #   they're readable throughout the process.
  mutate_at(vars(Date:Q6_text), as.character) %>%

  # Gather into long format, where we record the column it came from 
  #   as "question" and the value it held as "value"
  gather(question, value, -Subject_ID, -row_num) %>%

  # Combine the row_num and question into a new column
  unite("question2", c("row_num", "question")) %>%

  # Use that new column to spread everything out
  spread(question2, value)


> df2
  Subject_ID     1_Date 1_Q1  1_Q2_text 1_Q3 1_Q4 1_Q5 1_Q6_text     2_Date 2_Q1 2_Q2_text 2_Q3 2_Q4 2_Q5     2_Q6_text     3_Date 3_Q1 3_Q2_text 3_Q3 3_Q4 3_Q5 3_Q6_text
1          1 2019-01-01    4    Because    5    5    1 and so on 2019-01-02    1 O, bother    5    4    1          <NA> 2019-01-03    2      <NA>    3    4 <NA>      <NA>
2          2 2018-12-04 <NA>       <NA>    1    4    1      <NA>       <NA> <NA>      <NA> <NA> <NA> <NA>          <NA>       <NA> <NA>      <NA> <NA> <NA> <NA>      <NA>
3          3 2018-12-15    3 In addtion    5 <NA>    3      <NA> 2018-12-26    1      <NA>    4    3    2 in conclusion       <NA> <NA>      <NA> <NA> <NA> <NA>      <NA>

暫無
暫無

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

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