此问题已在此处有答案:
How to reshape data from long to wide format(14个回答)
4年前关闭。
我有一个 Dataframe ,看起来像这样:
ID Code_Type Code date
1 10 4 1
1 9 5 2
2 10 6 3
2 9 7 4
字符串
我希望它看起来像这样:
ID date.1 date.2 9 10
1 1 2 5 4
2 3 4 7 6
型
其中不同的日期在同一行上具有不同的列。
我现在的代码是这样的:
#Example df
df <- data.frame("ID" = c(1,1,2,2),
"Code_Type" = c(10,9,10,9),
"Code" = c(4,5,6,7),
"date"= c(1,2,3,4))
spread(df, Code_Type,Code)
型
该输出:
ID date 9 10
1 1 NA 4
1 2 5 NA
2 3 NA 6
2 4 7 NA
型
这和我想要的很相似,我只是不知道如何让日期列变成多列。任何帮助或额外的阅读是赞赏。
为了澄清这是我预期的输出 Dataframe
ID date.1 date.2 9 10
1 1 2 5 4
2 3 4 7 6
型
2条答案
按热度按时间ctzwtxfj1#
您可以使用基数R中的
reshape
。字符串
型
n6lpvg4x2#
以下是
dplyr
/tidyr
替代方案:字符串
这个想法是将
date
列分成两列,无论date
是 * 偶数 * 还是 * 奇数 *。这是使用模(%%
)运算符(和一些额外的数字处理)完成的。date.1 = date %% 2 * date
捕获日期中的奇数,并且对于所有其他数字是0
;date.2 = - (date %% 2 - 1) * date
捕获偶数,而0
捕获所有其他数字。之后就直接了当了选择除
date
以外的所有列;将其扩展为宽格式,并再次使用ID
进行总结,并删除所有NA
s(group_by(ID) %>% summarise_all(list(~ sum(.[!is.na(.)])))
.