例如,如果我有一个像这样的数据框,我试图创建一个函数,该函数将数据列中的每一列均按此分隔:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
我想创建一个函数,将col1除以col2,col3除以col4 .... col(n-1)除以col(n)到数据帧的末尾,并打印一个将所有输出列表。
我创建了一个划分列的函数,但它不是循环函数。
bigfunction<-function(data,n){
n<-1
data[,1]
data[,n+1]
d<-(data[,n]/data[,n+1])
print(as.list(d))}
答案 0 :(得分:1)
将计算结果矢量化!
df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)
df[c(1,3)]/df[c(2,4)]
# a c
#1 0.25 0.7000000
#2 0.40 0.7272727
#3 0.50 0.7500000
divdf <- function(data) {
data[seq(1,ncol(data),2)]/data[seq(2,ncol(data),2)]
}
divdf(df)
# a c
#1 0.25 0.7000000
#2 0.40 0.7272727
#3 0.50 0.7500000
您可以对此进行进一步的错误检查,以确保列数始终为偶数,等等,但这是可以添加的基本逻辑。
答案 1 :(得分:0)
您可以尝试这样的事情:
fun1 <- function(df){
for (i in 1:ncol(df)){
if (i%%2 == 1){next}
else{
temp <- df[, i-1]/df[, i]
temp_df <- cbind(temp_df, temp)
}
}
return(temp_df)
}
df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)
temp_df <- data.frame(id = 1:nrow(df))
new_df <- fun1(df)
我创建了一个临时数据帧来保持cbind
的向量。您可以稍后删除id
列,并根据要求更改列名称。假设您的列数是偶数(如果没有,那么它只会忽略最后一列)