所以假設我有以下資料框“df”:
names <- c("Bob","Mary","Ben","Lauren")
number <- c(1:4)
age <- c(20,33,34,45)
df <- data.frame(names,number,age)
假設我有另一個包含數千人的資料框(“df2”),我想對在“df”中每一行具有給定名稱、編號和年齡的其他資料框中的人的收入求和。也就是說,對于“df”的每一行“i”,我想創建第四列“TotalIncome”,它是資料框“df2”中具有給定姓名、年齡和數字的所有人的收入總和。換句話說,對于每一行“i”:
df$TotalIncome[i] <- sum(
df2$Income[df2$Name == df1$Name[i] &
df2$Numbers == df1$Numbers[i] &
df2$Age == df1$Age[i]], na.rm=TRUE)
有沒有辦法做到這一點,而不必為每一行“i”在 for 回圈中迭代并執行上述代碼?有沒有辦法使用 apply() 為整個向量計算這個,而不是只單獨迭代每一行?我正在使用的實際資料集很大,迭代需要很長時間,我希望在 R 中有更有效的方法來做到這一點。
謝謝!
uj5u.com熱心網友回復:
你考慮過使用dplyr包嗎?您可以使用一些 SQL 風格的語法,使這項作業變得快速而簡單。
代碼將類似于
library(dplyr)
df %>% left_join(df2) %>%
group_by(name, numbers, age) %>%
summarize(TotalIncome = sum(Income))
我建議您在 dplyr 站點上找到備忘單,或者查看Wickham 和 Grolemund 的書。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/385128.html
上一篇:批處理檔案FOR回圈改進
下一篇:串列索引必須不是串列
