【发布时间】:2020-12-14 16:20:46
【问题描述】:
想象一个由多个数字向量和几个像这样的因子向量组成的数据集(为此目的而制作)
name <- c("tim", "tom", "ben", "mary", "jane")
sex <- c("male","male","male","female","female")
born <- c(1985, 1986, 1985, 1986, 1984)
v4 <- c(5,4,3,2,1)
v5 <- c(10,20,600,20,5)
v6 <- c(1,2,3,4,5)
v7 <- c(0,0,20,4,60)
df <- data.frame(name, sex, born, v4,v5,v6,v7)
df[1:3] <- lapply(df[1:3], as.factor)
df[4:7] <- lapply(df[4:7], as.numeric)
我正在使用这个函数来计算数值变量的累积和。
colCumsum <- function(x) {
for (i in 1:ncol(x))
x[,i] <- cumsum(x[,i])
x
}
colCumsum(df[4:7])
当我排除数字变量时,它工作正常。但由于我需要因子变量、原始数值变量和累积总和组合在一个数据帧中,我尝试像这样重写函数:
colCumsum2 <- compiler::cmpfun(function(x) {
for (i in 1:ncol(x))
{if (is.numeric(x[,i]) == F) {next}}
#exlude non-numeric from function
x[,i+ncol(n)-3] <- cumsum(x[,i])
#add cumulative sum as extra column
x
} )
我的问题是:“新列会在现有列之后留下孔”。即使它有效,数字 3 也是因为我知道数据集中的因子 (3) 的数量,并且需要概括。
【问题讨论】:
标签: r cumulative-sum