gpt4 book ai didi

R:您如何根据其他变量的分组进行行总和?

转载 作者:行者123 更新时间:2023-12-01 04:49:36 25 4
gpt4 key购买 nike

以下是示例数据:

df <- data.frame("ID1" = c("A","A","B","C"), 
"Wt1" = c(0.8,0.6,0.4,0.5),
"ID2" = c("B","A","C","B"),
"Wt2" = c(0.1,0.4,0.5,0.5),
"ID3" = c("C",NA,"C",NA),
"Wt3" = c(0.1,NA,0.1,NA))

我想在数据框中创建一个列(投票),它基于来自 ID1、ID2、ID3 组的 wt 的 argmax。例如,在示例数据的第 3 行中,“B”的 wt 总和为 0.4,“C”的 wt 总和为 0.6,因此投票 =“C”。

所以结果会像
  ID1 Wt1 ID2 Wt2  ID3 Wt3 vote
1 A 0.8 B 0.1 C 0.1 A
2 A 0.6 A 0.4 <NA> NA A
3 B 0.4 C 0.5 C 0.1 C
4 C 0.5 B 0.5 <NA> NA C

在平局的情况下(示例中的第 4 行),只需选择任何 ID 值。有人可以提出解决方案吗?

最佳答案

首先,操作这种格式的表格非常困难。这不是您想要的输出,但恐怕您可能会被困在更远的道路上。

一种建议是格式化表格,以便我们可以轻松地从中检索信息。

为每个观察分配 id

df$obs <- 1:nrow(df)

然后把它们放在一个长格式
  df1 <- do.call("rbind",lapply(seq(1,6,2),function(x) {df <- df[,c(x: (x+1),7)]; 
colnames(df) <- c("ID","Wt","obs"); df}))

然后我的技能用 data.frame有限,所以我切换到 data.table包裹。
dt <- as.data.table(df1)

我们将 obs 和 ID 的投票数相加
dt[,total:=sum(Wt,na.rm=TRUE),.(obs,ID)]

然后很容易检索信息。
dt[,vote:=.SD[which.max(total)],obs]

#dt
# ID Wt obs total vote
# 1: A 0.8 1 0.8 A
# 2: A 0.6 2 1.0 A
# 3: B 0.4 3 0.4 C
# 4: C 0.5 4 0.5 C
# 5: B 0.1 1 0.1 A
# 6: A 0.4 2 1.0 A
# 7: C 0.5 3 0.6 C
# 8: B 0.5 4 0.5 C
# 9: C 0.1 1 0.1 A
# 10: NA NA 2 0.0 A
# 11: C 0.1 3 0.6 C
# 12: NA NA 4 0.0 C

关于R:您如何根据其他变量的分组进行行总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497317/

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