gpt4 book ai didi

r - 在满足 R 条件的列中添加某些行?

转载 作者:行者123 更新时间:2023-12-01 10:42:23 26 4
gpt4 key购买 nike

我正在使用 R 并想在列中添加某些值,但前提是行满足条件。因此,如果我在下面有一个数据框 data:

 Team MP Win
ATL 14 .4
ATL 25 .4
ATL 14 .4
BOS 14 .55
BOS 20 .55
BOS 9 .55

如何为 ATL (14+25+14 = 53) 和 BOS (14+20+ 9=43)?

编辑:如果我还想添加一个新变量,将 Win 乘以 MP/sums(其中 sums 是每个 teamMP 总和。所以对于 ATL 变量,我想要值 .4*14/53 和 .4*25/53,对于 BOS 我想要 .55*14/43, .55*20/43, .55*9/43

最佳答案

我认为这会产生您正在寻找的东西:

编辑

根据 akrun 的出色回答,这里有一个更紧凑的解决方案:

dat$cumsums <- ave(dat$MP, dat$Team, FUN=sum)
dat$newvar <- with(dat, Win * (MP/cumsums))

以前的解决方案

cumsums <- by(data = dat$MP, INDICES = dat$Team, FUN = sum)
cumsums.df <- data.frame(Team = names(cumsums), cumsums = as.numeric(cumsums))
dat <- merge(x=dat, y=cumsums.df, by = "Team")
dat$newvar <- with(dat, Win * (MP/cumsums))

结果

dat
Team MP Win cumsums newvar
1 ATL 14 0.40 53 0.1056604
2 ATL 25 0.40 53 0.1886792
3 ATL 14 0.40 53 0.1056604
4 BOS 14 0.55 43 0.1790698
5 BOS 20 0.55 43 0.2558140
6 BOS 9 0.55 43 0.1151163

数据

dat <- read.csv(text="Team,MP,Win
ATL,14,.4
ATL,25,.4
ATL,14,.4
BOS,14,.55
BOS,20,.55
BOS,9,.55")

关于r - 在满足 R 条件的列中添加某些行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29177330/

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