我有一個資料框,我想計算每一行中向量中存在的變數的總和,并在我希望創建的新變數的名稱來自向量中的變數的名稱之后在其他變數中求和
例如
資料
Name A_12 B_12 C_12 D_12 E_12
r1 1 5 12 21 15
r2 2 4 7 10 9
r3 5 15 16 9 6
r4 7 8 0 7 18
假設我有兩個向量
vector_1 <- c("A_12","B_12","C_12")
vector_2 <- c("B_12","C_12","D_12","E_12")
我想要的結果是:
New_data >
Name A_12 B_12 C_12 ABC_12 D_12 E_12 BCDE_12
r1 1 5 12 18 21 15 54
r2 2 4 7 13 10 9 32
r3 5 15 16 36 9 6 45
r4 7 8 0 15 7 18 40
我創建了 for 回圈來獲取向量中行的總和,但我沒有得到正確的結果 請告訴我您需要更多資訊或說明 謝謝
uj5u.com熱心網友回復:
您可以使用rowSums簡單的列子集:
dat$ABC_12 <- rowSums(dat[,vector_1])
dat$BCDE_12 <- rowSums(dat[,vector_2])
dat
# Name A_12 B_12 C_12 D_12 E_12 ABC_12 BCDE_12
# 1 r1 1 5 12 21 15 18 53
# 2 r2 2 4 7 10 9 13 30
# 3 r3 5 15 16 9 6 36 46
# 4 r4 7 8 0 7 18 15 33
請注意,如果您的框架繼承自data.table,那么您需要使用subset(dat, select=vector_1)或dat[,..vector_1]而不是簡單地使用dat[,vector_1]; 如果您還沒有使用data.table,那么您可以放心地忽略這一段。
uj5u.com熱心網友回復:
像這樣(使用dplyr/ tidyverse)
df %>%
rowwise() %>%
mutate(
ABC_12 = sum(c_across(vector_1)),
BCDE_12 = sum(c_across(vector_2))
)
盡管我不確定您示例中的總和是否正確
-=-=-=EDIT-=-=-=- 這是一個幫助命名的函式。
ex_fun <- function(vec, n_len){
paste0(paste(substr(vec,1,n_len), collapse = ""), substr(vec[1],n_len 1,nchar(vec[1])))
}
然后可以像這樣實作。
df %>%
rowwise() %>%
mutate(
!!ex_fun(vector_1, 1) := sum(c_across(vector_1)),
!!ex_fun(vector_2, 1) := sum(c_across(vector_2)),
)
-=-= 額外說明 -=--=
如果你列出你的向量,你可以將它與 r2evans 答案結合起來,如果你愿意的話,可以進入一個回圈。
vectors = list(vector_1, vector_2)
for (v in vectors){
df[ex_fun(v, 1)] <- rowSums(df[,v])
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340137.html
