[英]Sum selected columns and rows in R
有人知道如何在特定條件下對選定列的行求和嗎?
例如,我有五個列,其行按2000年至2008年的年份進行排序。我只需要對“ year <2006”中的行進行求和,然后添加一個新的總計列(因為不涉及其他年份,所以使用了NA) 。
我想group_by不起作用,因為我不需要按組求和
我的數據是
A <- c(1,2,3,4,5,6,7,8,9,10)
B <- c(1,2,3,4,5,6,7,8,9,10)
Year <- c(2000, 2001, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008)
dta <- as.data.frame(A,B, Year)
我很想獲得類似的東西
TotalColumn Year
2 2000
4 2001
6 2000
8 2001
10 2003
12 2004
14 2005
NA 2006
NA 2007
NA 2008
ifelse
在這里可能是一個不錯的選擇:
A <- c(1,2,3,4,5,6,7,8,9,10)
B <- c(1,2,3,4,5,6,7,8,9,10)
Year <- c(2000, 2001, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008)
dta <- as.data.frame(cbind(rep(NA, each = length(A)), Year))
colnames(dta) <- c("TotalColumn", "Year")
dta$TotalColumn <- ifelse(dta$Year < 2006, A + B, NA)
dta
輸出
TotalColumn Year
1 2 2000
2 4 2001
3 6 2000
4 8 2001
5 10 2003
6 12 2004
7 14 2005
8 NA 2006
9 NA 2007
10 NA 2008
使用data.table(根據弗蘭克的評論進行更新)
library(data.table)
A <- c(1,2,3,4,5,6,7,8,9,10)
B <- c(1,2,3,4,5,6,7,8,9,10)
Year <- c(2000, 2001, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008)
dta <- data.table(A, B, Year)
dta[Year < 2006, TotalColumn := A+B][, .(TotalColumn, Year)]
或者,您可以使用弗蘭克的建議,通過將最后一行替換為來編輯dta
dta[Year < 2006, TotalColumn := A+B][, c("A", "B") := NULL]
結果:
TotalColumn Year
1: 2 2000
2: 4 2001
3: 6 2000
4: 8 2001
5: 10 2003
6: 12 2004
7: 14 2005
8: NA 2006
9: NA 2007
10: NA 2008
嘗試在purrr中使用by_row函數
A <- c(1,2,3,4,5,6,7,8,9,10)
B <- c(1,2,3,4,5,6,7,8,9,10)
Year <- c(2000, 2001, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008)
dta <- data.frame(A,B, Year)
Total_col <- dta %>%
filter(Year < 2006) %>%
select(A,B) %>%
purrr::by_row(sum, .collate = "cols", .to = "Total_Col")
yr_total_Col <- dta %>% filter(Year < 2006) %>% select(Year)
Total_col <- cbind(Total_col,yr_total_Col)
這應該給你。
dta.x <- full_join(dta,Total_col) %>% select(Year,Total_Col)
# Year Total_Col
# 1 2000 2
# 2 2001 4
# 3 2000 6
# 4 2001 8
# 5 2003 10
# 6 2004 12
# 7 2005 14
# 8 2006 NA
# 9 2007 NA
# 10 2008 NA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.