gpt4 book ai didi

R:调整多次出现的情况的值

转载 作者:行者123 更新时间:2023-12-04 16:52:05 25 4
gpt4 key购买 nike

我有一个问题,希望不会成为高级 R 用户的巨大障碍......

test.data <- data.frame(case = c(1, 1, 1, 2, 2, 2, 3),
year = c(2006, 2007, 2008, 2007, 2006, 2008, 2006),
level = c(10, 20, 20, 12, 20, 20, 20))

您可能会看到,我对每个案例都有多次出现,按年份区分。级别的值在一个案例中有所不同,我想通过将每个级别的值设置为给定案例的最低级别来纠正这一点。在此示例中,case=1 的每个 level 值应为 10,case=2 的每个 level 值应为 12。
对于任何特定情况,我可以执行以下操作:
test.data$level[test.data$case==1] <- min(test.data$level[test.data$case==1])

但是因为我有几百个案例,这需要很长时间。因此,我想问您是否有更快的解决方案。

最佳答案

这是使用基本 R 函数的经典案例。

# may not be optimal for larger datasets due to merge
min.lvl <- aggregate(level ~ case, data = test.data, FUN = min)
merge(x = test.data, y = min.lvl, by = "case", all.x = TRUE, sort = FALSE)

case year level.x level.y
1 1 2006 10 10
2 1 2007 20 10
3 1 2008 20 10
4 2 2007 12 12
5 2 2006 20 12
6 2 2008 20 12
7 3 2006 20 20

做事的第二个 Vanilla 选项是
new.data <- by(data = test.data, INDICES = test.data$case, FUN = function(x) {
x$level <- min(x$level)
x
})

do.call("rbind", new.data)

case year level
1.1 1 2006 10
1.2 1 2007 10
1.3 1 2008 10
2.4 2 2007 12
2.5 2 2006 12
2.6 2 2008 12
3 3 2006 20

关于R:调整多次出现的情况的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110688/

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