[英]Create new dataframe column in R that conditions on row values without iterating?
所以假設我有以下 dataframe “df”:
names <- c("Bob","Mary","Ben","Lauren")
number <- c(1:4)
age <- c(20,33,34,45)
df <- data.frame(names,number,age)
假設我有另一個 dataframe(“df2”),有數千人,我想將其他 dataframe 中的人們的收入相加,這些 Z6A8064B5DF47C55057DZ 在“df”中每一行都有給定的名稱、數量和年齡。 也就是說,對於“df”的每一行“i”,我想創建第四列“TotalIncome”,它是 dataframe“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 中有更有效的方法來執行此操作。
謝謝!
您是否考慮過使用dplyr package? 您可以使用一些帶有 SQL 風格的語法,使這項工作變得快速而簡單。
代碼將類似於
library(dplyr)
df %>% left_join(df2) %>%
group_by(name, numbers, age) %>%
summarize(TotalIncome = sum(Income))
我建議您在 dplyr 站點上找到可用的備忘單或查看Wickham 和 Grolemund 的書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.