最小的工作示例。我不明白为什么v2011没有很好地定义。
myDf <- data.frame(
Year = c(2010, 2012, 2013, 2010:2013),
value = rnorm(7),
group = c(rep("A", 3), rep("B", 4))
)
myDf %>%
group_by(group) %>%
mutate(v2010 = case_when(2010 %in% Year ~ value[Year == 2010], T ~ NA),
v2011 = case_when(2011 %in% Year ~ value[Year == 2011], T ~ NA))
字符串
3条答案
按热度按时间6kkfgxo01#
对于长度为1的测试(每组),可以直接使用
if(){} else{}
。与ifelse
、if_else
和case_when
等向量化函数不同,if(){}
中的代码只有在条件为真时才会被计算。字符串
当然,您的操作并不能很好地推广--如果您想对1或2列以上的列执行此操作,则会变得重复,并且会使代码变得烦人。一种替代方法是过滤、透视和连接。通过调整
filter
,您可以使用相同的代码量在1年或多年内执行此操作:型
svdrlsy42#
我觉得
字符串
即使2011年不在年份中,也要进行评估。
这可能有助于理解发生了什么:
型
您可以用途:
型
cwtwac6a3#
不要使用
value[Year == 2011]
。发生错误的原因是第一组('A'
)中没有2011年。相反,检查是否没有这样的值(!length(value[year == 2011])
),并将NA
放在以下情况中:字符串