如何在数据框中划分列及其后的内容

时间:2018-08-30 22:20:18

标签: r

例如,如果我有一个像这样的数据框,我试图创建一个函数,该函数将数据列中的每一列均按此分隔:

 [,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))}

2 个答案:

答案 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列,并根据要求更改列名称。假设您的列数是偶数(如果没有,那么它只会忽略最后一列)