輸入資料:
Director= c("Director A", "Director B", "Director C")
Salary = c(40000, 35000, 50000)
Listed boards = c(1, 0, 3)
Unlisted boards = c(4, 2, 6)
Other boards = c(2, 3, 3)
Number of qualifications = c(1, 2, 1)
df_directors = data.frame(Director, Salary, Listed boards, Unlisted boards, Other boards, Number of qualifications)
現在我想創建一個額外的列來求和并替換關于板的三列。所以我的輸出資料應該是這樣的:
Director Salary Boards Number of qualifications
Director A 40000 7 1
Director B 35000 5 2
Director C 50000 12 1
這段代碼不知何故不起作用。
df_directors <- df_directors %>%
rowwise() %>%
mutate(rBoards = sum(c_across(all_of(Listed Boards:Other Boards))))
uj5u.com熱心網友回復:
我們可以使用rowSumswith select:
library(dplyr)
df_directors %>%
transmute(Director, Salary, Boards = rowSums(select(., contains("boards"))),Number_of_qualifications)
第一個解決方案:
library(dplyr)
df_directors %>%
mutate(Boards = rowSums(select(., contains("boards")))) %>%
select(1,2,Boards,6)
Director Salary Boards Number_of_qualifications
1 Director A 40000 7 1
2 Director B 35000 5 2
3 Director C 50000 12 1
uj5u.com熱心網友回復:
我們可以rowSums使用base R
library(dplyr)
df_directors %>%
transmute(Director, Salary,
Boards = rowSums(across(ends_with('boards')), na.rm = TRUE),
`Number of qualifications`)
-輸出
Director Salary Boards Number of qualifications
1 Director A 40000 7 1
2 Director B 35000 5 2
3 Director C 50000 12 1
在OP的代碼中,當列名中有空格時需要反引號
df_directors %>%
rowwise() %>%
mutate(rBoards = sum(c_across(`Listed boards`:`Other boards`))) %>%
ungroup
-輸出
# A tibble: 3 × 7
Director Salary `Listed boards` `Unlisted boards` `Other boards` `Number of qualifications` rBoards
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Director A 40000 1 4 2 1 7
2 Director B 35000 0 2 3 2 5
3 Director C 50000 3 6 3 1 12
資料
df_directors <- structure(list(Director = c("Director A", "Director B", "Director C"
), Salary = c(40000, 35000, 50000), `Listed boards` = c(1, 0,
3), `Unlisted boards` = c(4, 2, 6), `Other boards` = c(2, 3,
3), `Number of qualifications` = c(1, 2, 1)),
class = "data.frame", row.names = c(NA,
-3L))
uj5u.com熱心網友回復:
rowSums并grep用于識別。
cbind(df_directors[1:2], Boards=rowSums(df_directors[grep('boards$', names(df_directors))]), df_directors[ncol(df_directors)])
# Director Salary Boards Number.of.qualifications
# 1 Director A 40000 7 1
# 2 Director B 35000 5 2
# 3 Director C 50000 12 1
資料:
df_directors <- structure(list(Director = c("Director A", "Director B", "Director C"
), Salary = c(40000, 35000, 50000), Listed.boards = c(1, 0, 3
), Unlisted.boards = c(4, 2, 6), Other.boards = c(2, 3, 3), Number.of.qualifications = c(1,
2, 1)), class = "data.frame", row.names = c(NA, -3L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498163.html
上一篇:R基于行條件的資料框中的不同計算
