Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将行百分比作为新行添加到数据帧_R - Fatal编程技术网

R 如何将行百分比作为新行添加到数据帧

R 如何将行百分比作为新行添加到数据帧,r,R,在R怎么做?谢谢大家! 在以后的问题中,请表明您自己至少已经尽了最小的努力来解决问题 这里有两种使用lappy的方法第二个是后来在编辑中添加的,因为它比第一个简单得多,而且可能快得多。 group x1 x2 total A 2 8 10 % 20.00 80.00 B 8 2 % 80.00 20.00 10 根据您的评论添加:Afor循环方法 > pct &l

在R怎么做?谢谢大家!

在以后的问题中,请表明您自己至少已经尽了最小的努力来解决问题

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

group   x1      x2     total
 A       2       8       10
 %       20.00   80.00
 B       8       2
 %       80.00   20.00   10
根据您的评论添加:A
for
循环方法

> 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      

>x1@Scriven谢谢。如果我想使用循环,怎么做。这是一个循环
lappy
是一个循环函数(注意
i
的使用)。如果您想要的是
for
循环方法,我可以向您展示
for
循环方法,但是
apply
函数是更好的循环方法。@Scriven谢谢。我需要一个for循环方法。@斯塔塔,我已经添加了一个
for
循环方法
> 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
> 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      
> 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