data.frame in r 中的条件运算

conditional operation in data.frame in r

我使用下面的代码在 r 中生成了一个数据帧:

set.seed(456)

data_5 <- data.frame(id=factor(rep(c("A","B","c"),each=214)),
                     people=c(floor(runif(214,min=10,max=800)),
                              floor(runif(214,min=20,max=810)),
                              floor(runif(214,min=30,max=820))))

Q1:我想添加一个新列,它显示来自列 "people" 中每个值的结果除以它所属的总值(也就是说类别 A 中的每个值将是除以A类总价值,B类同)

Q2:想添加一个新列,它应该显示每个步骤(总共 214 个步骤)的类别 A、B、C 的平均值,我知道它将生成一个包含 214 个值的列 3 次....但我想这可能不会影响绘图。

Q3:我想分别计算A类、B类、C类的Q1累计值

已经尝试通过生成每一列并对其进行整合来获得这些结果,但只是在寻找一种更好的优化方法..

干杯

您可以使用下面的 ave 函数(希望我正确理解您的问题)。使用第一行的语法,世界几乎就是你的牡蛎,你可以指定你想要应用于不同 id 类别的任何函数。您可能还想查看 aggregatebytapply 函数以将函数应用于不同的类别。

编辑以反映对评论中问题的更新:

data_5 <- data.frame(id = factor(rep(c("A","B","c"),each=214)),
                     people = c(floor(runif(214,min=10,max=800)),
                              floor(runif(214,min=20,max=810)),
                              floor(runif(214,min=30,max=820))),
                     time = rep(1:214, 3))

data_5$perc <- ave(data_5$people, data_5$id, FUN = function(x) x/sum(x))
data_5$cumperc <- ave(data_5$perc, data_5$id, FUN = cumsum) 
data_5$mean_cumperc <- ave(data_5$cumperc, data_5$time, FUN = mean)