gpt4 book ai didi

按 ID reshape 数据并将所有值添加到 R 中的一行中

转载 作者:行者123 更新时间:2023-12-05 00:26:39 27 4
gpt4 key购买 nike

我有一个数据框看起来像这样:

ID  V1 V2  V3
1 1 2 3
1 2 3 4
1 3 4 5
2 3 4 5
3 4 5 6
3 2 3 4

我需要 reshape 数据框,以便所有记录都属于同一行中的一个人
像这样:
ID V1 V2 V3 V1_2 V2_2 V3_2 V1_3 V2_3 V3_3
1 1 2 3 2 3 4 3 4 5
2 3 4 5
3 4 5 6 2 3 4

因为每个人的记录数不同,新的数据框每一行的长度都会不同。我怎样才能做到这一点?

最佳答案

一种直接的方法是使用 reshape2包,但您必须添加辅助 ID。

### The next line creates a secondary ID variable
mydf$ID2 <- ave(mydf$ID, mydf$ID, FUN = seq_along)

library(reshape2)
dfL <- melt(mydf, id.vars=c("ID", "ID2"))
dcast(dfL, ID ~ variable + ID2)
# ID V1_1 V1_2 V1_3 V2_1 V2_2 V2_3 V3_1 V3_2 V3_3
# 1 1 1 2 3 2 3 4 3 4 5
# 2 2 3 NA NA 4 NA NA 5 NA NA
# 3 3 4 2 NA 5 3 NA 6 4 NA

或者,在添加如上所示的“ID2”之后,您也可以直接使用基数 R 的 reshape 进行整形。 .列顺序不同,但数据相同。
reshape(mydf, direction = "wide", idvar="ID", timevar="ID2")
# ID V1.1 V2.1 V3.1 V1.2 V2.2 V3.2 V1.3 V2.3 V3.3
# 1 1 1 2 3 2 3 4 3 4 5
# 4 2 3 4 5 NA NA NA NA NA NA
# 5 3 4 5 6 2 3 4 NA NA NA

关于按 ID reshape 数据并将所有值添加到 R 中的一行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com