我想在数据帧中添加一个变量向量,在给定的变量组中重复。必须有一种简单的方法在dplyr表示法中执行此操作(我宁愿不必执行match()语句)
数据:
library(dplyr); library(lubridate)
data <- data.frame(
date = seq(as.Date('2014-11-01'), length = 30, by = '1 day'))
data$day <- weekdays(as.Date(data$date))
data$week <- week(as.Date(data$date))
现在,对于每周突破,我想从预先指定的向量中添加一个数字(我试图将月份分成每周百分比总和为1):
weekly_vector <- c(0.1, 0.2, 0.4, 0.2, 0.1)
我的想法是,我希望此向量的第一个元素--0.1--附加到第44周,第二个元素附加到第45周,依此类推。
但是像:
data <- data %>% group_by(week) %>% mutate(perc = weekly_vector)
不起作用:错误:无法复制大小为5的载体
我如何通过每周突破复制矢量元素?
答案 0 :(得分:1)
您正尝试为weekly_vector
的每个子集分配perc
到data
列,这不是您想要做的。您想要的是每周为weekly_vector
选择一个元素,并将此唯一值分配给perc
中的data
列。一种方法是通过left_join
通过将数据与包含每周的数据框和相应的perc
值相结合来实现。
data %>% left_join(data.frame(week = unique(data$week), perc = weekly_vector))
但你不一定需要dplyr
。例如,你可以做到
data$perc <- weekly_vector[factor(data$week, labels ="")]