향후 질문이 있으시면, 최소한의 노력으로 직접 문제를 해결해주십시오.
여기에 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 감사합니다. 루프를 사용하고 싶다면, 어떻게해야합니까? – stata
이것은 루프입니다. 'lapply'는 루핑 함수입니다 ('i'의 사용에주의하십시오). 만약 당신이'for' 루프 메소드를 보여줄 수는 있지만,'apply' 함수는 루핑을하는 더 좋은 R 메소드입니다. –
@Scriven Thanks. for 루프 메서드가 필요합니다. – stata