转置保留前两列作为标识符的 R 数据框
Transposing an R data frame maintaining the first two columns as identifiers
我有一个更大的数据集,但为了这个例子,我做了一个更小的数据集。我的数据集看起来像这样
df <- data.frame(ID = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3),
APPT_ID = c(11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14),
Variable = c(letters[1:3], letters[1:3], letters[1:3], letters[1:3]),
Value = c(41:52))
前两列(ID 和 APPT_ID)是每个观察的标识符,所以我想将它们保留为列,同时转置后两列(变量和值),以便每个变量是它自己的显示其值的列。我希望 ID 和 APPT_ID.
的每个唯一组合只有一个观察行
我希望我的输出数据集如下所示:
df2 <- data.frame(ID = c(1, 1, 2, 3), APPT_ID = c(11, 12, 13, 14),
a = c(41, 44, 47, 50), b = c(42, 45, 48, 51),
c = c(43, 46, 49, 52) )
最好的原因是什么?
我认为这将完成工作
library(tidyr)
df %>%
spread(Variable, Value)
和reshape2
dcast(df, ID+APPT_ID~Variable, value.var="Value")
# ID APPT_ID a b c
# 1 1 11 41 42 43
# 2 1 12 44 45 46
# 3 2 13 47 48 49
# 4 3 14 50 51 52
在基础 R 中,您可以使用 reshape()
:
reshape(df,dir='w',idvar=c('ID','APPT_ID'),timevar='Variable');
## ID APPT_ID Value.a Value.b Value.c
## 1 1 11 41 42 43
## 4 1 12 44 45 46
## 7 2 13 47 48 49
## 10 3 14 50 51 52
您可以使用 varying
参数来控制生成的可变(非标识符)列的名称。
我有一个更大的数据集,但为了这个例子,我做了一个更小的数据集。我的数据集看起来像这样
df <- data.frame(ID = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3),
APPT_ID = c(11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14),
Variable = c(letters[1:3], letters[1:3], letters[1:3], letters[1:3]),
Value = c(41:52))
前两列(ID 和 APPT_ID)是每个观察的标识符,所以我想将它们保留为列,同时转置后两列(变量和值),以便每个变量是它自己的显示其值的列。我希望 ID 和 APPT_ID.
的每个唯一组合只有一个观察行我希望我的输出数据集如下所示:
df2 <- data.frame(ID = c(1, 1, 2, 3), APPT_ID = c(11, 12, 13, 14),
a = c(41, 44, 47, 50), b = c(42, 45, 48, 51),
c = c(43, 46, 49, 52) )
最好的原因是什么?
我认为这将完成工作
library(tidyr)
df %>%
spread(Variable, Value)
和reshape2
dcast(df, ID+APPT_ID~Variable, value.var="Value")
# ID APPT_ID a b c
# 1 1 11 41 42 43
# 2 1 12 44 45 46
# 3 2 13 47 48 49
# 4 3 14 50 51 52
在基础 R 中,您可以使用 reshape()
:
reshape(df,dir='w',idvar=c('ID','APPT_ID'),timevar='Variable');
## ID APPT_ID Value.a Value.b Value.c
## 1 1 11 41 42 43
## 4 1 12 44 45 46
## 7 2 13 47 48 49
## 10 3 14 50 51 52
您可以使用 varying
参数来控制生成的可变(非标识符)列的名称。