我想知道如何使用回圈創建新列,這些新列是現有列的行總和。鑒于此資料,
df <- data.frame(A=c(22, 25, 29, 13, 22, 30),
B=c(12, 10, 6, 6, 8, 11),
C=c(NA, 15, 15, 18, 22, 13))
我想創建兩列,分別稱為 a1 和 a2,其中 a1 是 A 列和 B 列的行總和,a2 是 A、B 和 C 列的行總和。
所需的輸出如下所示。
---- ---- ---- ---- ----
| A | B | C | a1 | a2 |
---- ---- ---- ---- ----
| 22 | 12 | NA | 34 | 34 |
| 25 | 10 | 15 | 35 | 50 |
| 29 | 6 | 15 | 35 | 50 |
| 13 | 6 | 18 | 19 | 37 |
| 22 | 8 | 22 | 30 | 52 |
| 30 | 11 | 13 | 41 | 54 |
---- ---- ---- ---- ----
我嘗試了以下方法,但這些方法給我錯誤。
首先,我嘗試使用 dplyr
for(i in 1:2) {
df<-df%>%
mutate_(paste0("a",i)= rowSums(df[,1:(1 i)],na.rm=TRUE))
}
其次,我嘗試使用 data.table
for(i in 1:2) {
df<-df[,paste0("a",i) := rowSums(df[,1:(1 i)])]
}
我想知道如何以兩種方式獲得所需的輸出另外,我認為使用回圈可能不是最好的方法。如果可能的話,我還想知道如何使用“應用”功能來做到這一點。
非常感謝您!
uj5u.com熱心網友回復:
要回答有關使用該apply(df, MARGIN, FUN, ...)
函式的問題,您只需記住邊距1
用于按行操作并2
用于按列操作。
此外,您可以在函式內添加任何其他函式引數apply
!
因此,在您的情況下,如果您使用apply(df, 1, sum, na.rm = T)
,該函式將計算所有行總和,同時洗掉所有NA
.
您可以通過以下方式代替使用dplyr
ordata.table
來做到這一點
df["a1"] = apply(df[1:2], 1, sum, na.rm = T)
df["a2"] = apply(df[1:3], 1, sum, na.rm = T)
uj5u.com熱心網友回復:
干得好
for(i in 1:2) {
df[[paste0("a",i)]] <- rowSums(df[, 1:(i 1)], na.rm = TRUE)
}
df
A B C a1 a2
1 22 12 NA 34 34
2 25 10 15 35 50
3 29 6 15 35 50
4 13 6 18 19 37
5 22 8 22 30 52
6 30 11 13 41 54
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/536393.html
標籤:r