R 如何将行百分比作为新行添加到数据帧
在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
lappy
的方法第二个是后来在编辑中添加的,因为它比第一个简单得多,而且可能快得多。
group x1 x2 total
A 2 8 10
% 20.00 80.00
B 8 2
% 80.00 20.00 10
根据您的评论添加:Afor
循环方法
> 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