【发布时间】:2022-01-10 06:18:36
【问题描述】:
我有这些数据:
db <- read.table(header=T, text="
ID site R S data
1 1 2 10 01/02/2021
1 1 3 20 03/02/2021
1 2 4 50 05/01/2021
2 1 7 40 02/02/2021
2 2 2 30 05/02/2021
2 2 5 60 06/02/2021
2 2 9 10 07/02/2021
3 1 2 20 02/02/2021
3 2 6 30 03/02/2021
4 1 4 40 05/02/2021
5 1 5 20 07/02/2021")
我想得到以下结果:
db_transpose <- read.table(header=T, text="
ID site R S data R_1 S_1 data_1 R_2 S_2 data_2
1 1 2 10 01/02/2021 3 20 03/02/2021 NA NA NA
1 2 4 50 05/01/2021 NA NA NA NA NA NA
2 1 7 40 02/02/2021 NA NA NA NA NA NA
2 2 2 30 05/02/2021 5 60 06/02/2021 9 10 07/02/2021
3 1 2 20 02/02/2021 NA NA NA NA NA NA
3 2 6 30 03/02/2021 NA NA NA NA NA NA
4 1 4 40 05/02/2021 NA NA NA NA NA NA
5 1 5 20 07/02/2021 NA NA NA NA NA NA")
对于ID 和site 列的每种组合,我想将R、S 和data 列中的数据按data 顺序转置。
我试过reshape2 没有结果。
这里尝试了S 和R 变量:
require(reshape2)
dcast(db, ID + site ~ data, value.var=c ("S", "R"))
但我收到此错误消息:
Error in .subset2(x, i, exact = exact) : index out of bounds
Warning message:
In if (!(value.var %in% names(data))) { :
the condition has length > 1 and only the first element will be used
这里我只尝试了一个变量:
dcast(db, ID + site ~ data, value.var="S")
But I obtain a result totally different from what I need:
ID site 01/02/2021 02/02/2021 03/02/2021 05/01/2021 05/02/2021 06/02/2021 07/02/2021
1 1 2 NA NA NA 50 NA NA NA
2 1 1 10 NA 20 NA NA NA NA
3 2 1 NA 40 NA NA NA NA NA
4 2 2 NA NA NA NA 30 60 10
5 3 1 NA 20 NA NA NA NA NA
6 3 2 NA NA 30 NA NA NA NA
7 4 1 NA NA NA NA 40 NA NA
8 5 1 NA NA NA NA NA NA 20
谢谢
【问题讨论】:
-
你能解释一下逻辑吗?在您的最终结果中,原始帧中的大多数数据都被忽略,例如第一行被忽略。为什么会这样?
-
@Onyambu 我有一份患者名单。每个患者 (ID) 都有一个或多个医院访问权限(站点)。在每次访问期间,患者都会进行两次检查。我需要为每位患者和 H-在一行中访问所有检查结果和数据。每一行都是一名患者和一个 H 访问权限,其中包含与该特定患者/访问权限相关的所有信息。
-
那你的预期结果不正确?
-
no.....你知道我可以获得db_transpose数据吗?
-
查看答案
标签: r data-manipulation