繁体   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