使用sum(x:y)从R中的现有值创建新的变量/向量

时间:2015-01-12 13:52:29

标签: r sum

我在R中使用数据框d:

ID <- c("A","A","A","B","B")
eventcounter <- c(1,2,3,1,2)
numberofevents <- c(3,3,3,2,2)
d <- data.frame(ID, eventcounter, numberofevents)

> d
  ID eventcounter numberofevents
1  A            1              3
2  A            2              3
3  A            3              3
4  B            1              2
5  B            2              2

其中numberofevents是每个eventcounter的{​​{1}}中的最高值。

目前,我正在尝试创建一个额外的向量ID。 如果是z <- c(6,6,6,3,3),则应计算numberofevents == 3,同等地计算sum(1:3)

如果是3 + 2 + 1 = 6,则应该numberofevents == 2平均计算sum(1:2)

使用大量数据,我认为创建这个额外的向量可能很方便 通过使用R 2 + 1 = 3中的sum函数,即

d$z<-sum(1:d$numberofevents)

sum(1:3) # for the rows 1-3

但是,我总是收到这个警告:

sum(1:2) # for the rows 4-5.

2 个答案:

答案 0 :(得分:3)

您可以尝试ave

 d$z <- with(d, ave(eventcounter, ID, FUN=sum))

或使用data.table

  library(data.table)
  setDT(d)[,z:=sum(eventcounter), ID][]

答案 1 :(得分:1)

尝试在R。

中使用apply sapply或lapply函数
sapply(numberofevents, function(x)  sum(1:x))

它对我有用。