R:将数据重塑为长到宽,包括日期
(我试图添加数据,但格式是如此可怕,以至于我放弃了。)
我对重塑纵向数据有疑问。诀窍是我每个主题有多行('row_num'的范围是1到8)。
我查看了20多个Stack Overflow页面,其他一些页面以及Hadley关于重塑的帖子(和文章),但似乎找不到空白:
我每个科目都有多行,而且找不到如何将其变成一行。诀窍是,我需要(假设)Q1,...,Q5,并将其变成两个或更多的 blocks 问题(Q1.1,...,Q5.1,Q1 .2,... Q5.2,...)
使用一种术语,'row_num'是一个主题内变量,并且所有内容似乎都基于 subject-subject 变量。
这让我感到困惑和沮丧,因为恕我直言,经典的纵向到宽阔的情况是:每个主题多行(带有一个变量块)到每个主题多行(带有多个变量块)。
有人可以指导我找到一些涵盖此内容的答案或教程吗?
非常感谢您!
在编辑后,原始数据帧的内容如下所示:
# 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
答案 0 :(得分:0)
如果您提供了一些示例数据,我们将为您提供帮助。网络上充斥着使用以下功能来完成您感兴趣的功能的教程:
gather()
和spread()
来自tidyr
软件包
melt()
和dcast()
来自reshape2
软件包
答案 1 :(得分:0)
这是使用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>