gpt4 book ai didi

r - 在具有多个匹配行的 R 中使用 reshape 函数

转载 作者:行者123 更新时间:2023-12-05 04:15:54 24 4
gpt4 key购买 nike

所以我有以下数据框df:

       X     Y     Z     ID     value
1 0 20 135 a 20
2 0 20 135 a 30
3 0 20 135 b 40
4 20 104 20 c 10
5 20 104 20 b 15
...

我想要一个最终输出

       X     Y     Z     a     b     c     
1 0 20 135 20 40 null
2 0 20 135 30 null null
3 20 104 20 null 15 10
...

我想将所有不同的 ID 转换为包含原始数据框中的值的单独列。我目前正在做的是 reshape (df,idvar=c(“X”,“Y”,“Z”),timevar="ID",direction="wide")。但是,这会导致警告:a bc 中的每一个都匹配多行,因此只采用第一行。我希望每个独特的 XYZ 组合都有一行,但由于有许多重复测量,我也希望每个组合有多个行,但每个 abc 的重复测量次数不同。有什么办法可以有效地做到这一点?

最佳答案

您已经确定了问题的答案:您需要添加一个辅助“id”变量。使用我的“splitstackshape”包中的 getanID 可以轻松完成此操作。这是它的作用:

library(splitstackshape)
getanID(mydf, c("X", "Y", "Z", "ID"))
# X Y Z ID value .id
# 1: 0 20 135 a 20 1
# 2: 0 20 135 a 30 2
# 3: 0 20 135 b 40 1
# 4: 20 104 20 c 10 1
# 5: 20 104 20 b 15 1

考虑到这一点,下面是您将如何更改当前的reshape 方法:

reshape(getanID(mydf, c("X", "Y", "Z", "ID")), 
direction = "wide", idvar = c("X", "Y", "Z", ".id"), timevar = "ID")
# X Y Z .id value.a value.b value.c
# 1: 0 20 135 1 20 40 NA
# 2: 0 20 135 2 30 NA NA
# 3: 20 104 20 1 NA 15 10

或者,由于“data.table”也加载了“splitstackshape”,您可以使用 dcast.data.table,如下所示:

dcast.data.table(getanID(mydf, c("X", "Y", "Z", "ID")),
X + Y + Z + .id ~ ID, value.var = "value")
# X Y Z .id a b c
# 1: 0 20 135 1 20 40 NA
# 2: 0 20 135 2 30 NA NA
# 3: 20 104 20 1 NA 15 10

关于r - 在具有多个匹配行的 R 中使用 reshape 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30133659/

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