相关疑难解决方法(0)

如何将多个变量的重复测量扩展为宽格式?

我正在尝试使用长格式的列并将它们扩展为宽格式,如下所示.我想用tidyr用我正在投资的数据处理工具来解决这个问题,但为了使这个答案更加通用,请提供其他解决方案.

这就是我所拥有的:

library(dplyr); library(tidyr)

set.seed(10)
dat <- data_frame(
    Person = rep(c("greg", "sally", "sue"), each=2),
    Time = rep(c("Pre", "Post"), 3),
    Score1 = round(rnorm(6, mean = 80, sd=4), 0),
    Score2 = round(jitter(Score1, 15), 0),
    Score3 = 5 + (Score1 + Score2)/2
)

##   Person Time Score1 Score2 Score3
## 1   greg  Pre     80     78   84.0
## 2   greg Post     79     80   84.5
## 3  sally  Pre     75     74   79.5
## 4  sally Post     78     78   83.0
## 5    sue  Pre     81     78 …
Run Code Online (Sandbox Code Playgroud)

r tidyr

63
推荐指数
3
解决办法
1万
查看次数

从长到宽格式转换/重塑数据帧而不使用"timevar"

我有一个数据框,遵循以下长模式:

   Name          MedName
  Name1    atenolol 25mg
  Name1     aspirin 81mg
  Name1 sildenafil 100mg
  Name2    atenolol 50mg
  Name2   enalapril 20mg
Run Code Online (Sandbox Code Playgroud)

并希望得到以下(我不在乎我是否可以这样命名列,只是想要这种格式的数据):

   Name   medication1    medication2      medication3
  Name1 atenolol 25mg   aspirin 81mg sildenafil 100mg
  Name2 atenolol 50mg enalapril 20mg             NA
Run Code Online (Sandbox Code Playgroud)

通过这个网站,我已经熟悉了reshape/reshape2包,并经历了多次尝试,试图让它工作,但迄今为止失败了.

当我尝试时,dcast(dataframe, Name ~ MedName, value.var='MedName')我只得到一堆列为药物名称的标志(转换的值为1或0)示例:

 Name  atenolol 25mg  aspirin 81mg
Name1              1             1
Name2              0             0 
Run Code Online (Sandbox Code Playgroud)

我在尝试dcast(dataset, Name ~ variable)融化数据集后尝试过,但这只是吐出以下内容(只计算每个人有多少药物):

 Name  MedName
Name1        3
name2        2
Run Code Online (Sandbox Code Playgroud)

最后,我试图融化数据,然后重塑使用idvar="Name" timevar="variable"(其中所有只是Mednames),但是这似乎不是为我的问题构建的,因为如果有多个匹配到idvar,重塑只需要第一个MedName并忽略休息.

有谁知道如何使用重塑或其他R功能这样做?我意识到可能有一种方法以更杂乱的方式执行此操作,其中一些for循环和条件基本上分割并重新粘贴数据,但我希望有一个更简单的解决方案.非常感谢!

transpose r reshape r-faq

18
推荐指数
6
解决办法
4980
查看次数

标签 统计

r ×2

r-faq ×1

reshape ×1

tidyr ×1

transpose ×1