簡體   English   中英

在 R 中創建新的 dataframe 列,以行值為條件而不進行迭代?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM