【问题标题】:How to add row percent as new row to dataframe如何将行百分比作为新行添加到数据框
【发布时间】:2014-05-22 20:01:39
【问题描述】:
aaa<-data.frame(group=c("A","B"),x1=c(2,8),x2=c(8,2),total=c(10,10),stringsAsFactors=FALSE)

现在我想将行百分比计算为频率行下方的新行。新的数据框,如:

group   x1      x2     total
 A       2       8       10
 %       20.00   80.00
 B       8       2
 %       80.00   20.00   10

如何在 R 中做到这一点?谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    在以后的问题中,请表明您至少为自己解决问题付出了最少的努力。

    这里有两种使用lapply 的方法。 第二个是后来在编辑中添加的,因为它比第一个简单得多,而且可能更快。

    > newD <- do.call(rbind, lapply(seq(nrow(aaa)), function(i){
          x1 <- 100*(aaa$x1[i]/aaa$total[i])
          x2 <- 100*(aaa$x2[i]/aaa$total[i])
          rbind(aaa[i, ], c('%', x1, x2, ''))
      }))
    > rownames(newD) <- seq(nrow(newD))
    > newD
    #    group x1 x2 total
    # 1      A  2  8    10
    # 2      % 20 80      
    # 3      B  8  2    10
    # 4      % 80 20
    

    第二种更好的lapply方法:

    > pct <- cbind(group = '%', 100*aaa[2:3]/aaa$total, total = '')
    > do.call(rbind, lapply(seq(nrow(aaa)), function(i){ rbind(aaa[i,], pct[i,]) }))
    ##    group x1 x2 total
    ## 1      A  2  8    10
    ## 2      % 20 80      
    ## 22     B  8  2    10
    ## 21     % 80 20      
    

    根据您的评论添加:for 循环方法

    > x1 <- x2 <- numeric(nrow(aaa))
    > rb <- vector('list', nrow(aaa)/2)
    
    > for(i in seq(nrow(aaa))){
        x1[i] <- 100*(aaa$x1[i]/aaa$total[i])
        x2[i] <- 100*(aaa$x2[i]/aaa$total[i])
        rb[[i]] <- rbind(aaa[i, ], c('%', x1[i], x2[i], ''))
      }
    
    > do.call(rbind, rb)
    #    group x1 x2 total
    # 1      A  2  8    10
    # 2      % 20 80      
    # 22     B  8  2    10
    # 21     % 80 20      
    

    【讨论】:

    • @Scriven 谢谢。如果我想使用循环,怎么做。
    • 这是一个循环。 lapply 是一个循环函数(注意使用i)。如果这是您所追求的,我可以向您展示 for 循环方法,但 apply 函数是更好的 R 循环方法。
    • @Scriven 谢谢。我需要一个 for 循环方法。
    • @stata,我添加了for循环方法
    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2018-12-23
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多