簡體   English   中英

如何在 R 中添加一個列,其值引用不同數據框中的列?

[英]How can I add a column in R whose values reference a column in a different data frame?

所以我有一個 R 腳本來對大學橄欖球隊進行排名。 它輸出一個評級,我想從不同的數據框中獲取該評級,並將其作為新列添加到包含下一周比賽信息的不同數據框中。 這是我目前正在嘗試做的事情:

random_numbers <- rnorm(130, mean = mean_value, sd = sd_value)
sample_1 <- as.vector(sample(random_numbers, 1, replace = TRUE))
upcoming_games_df <- upcoming_games_df %>%
  mutate(home_rating = case_when(home_team %in% Ratings$team ~ Ratings$Rating[Ratings$team == home_team]),
         TRUE ~ sample_1)
sample_2 <- as.vector(sample(random_numbers, 1, replace = TRUE))
upcoming_games_df <- upcoming_games_df %>%
  mutate(away_rating = case_when(away_team %in% PrevWeek_VoA$team ~ Ratings$Rating[Ratings$team == away_team]),
         TRUE ~ sample_2)

我最初在 mutate() function 中有樣本(隨機數),但出現錯誤“必須是向量,而不是formula object”。 所以我將它移到了 mutate() function 之外並添加了 as.vector(),但它仍然給了我同樣的錯誤。 我還收到有關“較長的 object 長度不是較短 object 長度的倍數”的警告。 我不知道現在該怎么辦。 上面的代碼是我來這里尋求幫助之前嘗試的最后一件事。

case_when要求所有 arguments 的長度相同。 sample_1sample_2的長度為 1,它可以被回收。 as.vector不需要,因為rnorm返回一個vector )。

此外,當我們使用==時,它是逐元素比較,並且只能在比較的兩列的長度相同或其中一列的長度為 1 時使用(即它被回收)。 因此Ratings$team == home_team將導致longer object length警告。

而不是case_when ,這可以通過加入來完成(假設 'Ratings' 中的 'team' 列不重復)

library(dplyr)
upcoming_games_df2 <- upcoming_games_df %>%
   left_join(Ratings, by = c("home_team" = "team")) %>%
   mutate(home_rating = coalesce(Rating, sample_1), team = NULL) %>%
   left_join(PrevWeek_VoA, by = c("away_team" = "team")) %>%
   mutate(away_rating = coalesce(Rating, sample_2))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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