【问题标题】:how to divide column and this following in a data frame如何在数据框中划分列和以下内容
【发布时间】:2018-08-30 22:20:18
【问题描述】:

我尝试创建一个函数,将每一列除以数据框中的以下内容,例如,如果我有这样的数据框:

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

【问题讨论】:

    标签: r


    【解决方案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
    

    您可以为此添加一些进一步的错误检查,以确保您始终拥有偶数列等,但这是您可以添加的基本逻辑。

    【讨论】:

      【解决方案2】:

      你可以试试这样的:

      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)
      

      我创建了一个临时数据框来保持cbinding 向量。您可以稍后删除id 列并根据需要更改列名。这假设您有偶数列(如果没有,那么它将简单地忽略最后一列)

      【讨论】:

        猜你喜欢
        • 2021-10-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2016-08-05
        • 2021-09-08
        • 1970-01-01
        相关资源
        最近更新 更多