我正在将</a>
值的r dataframe从长格式转换为宽格式。并尝试添加执行“跳过” NA
值的操作的新行。
我可以使用NA
,但最终希望对跨多年收集的每个度量执行操作。在下面的示例中,它可能包含两个或多个值。例如spread()
包含三个值,其他度量值包含两个:
meas == 4
我最终要寻找的是介于长数据集和宽数据集之间的数据,如下所示:
df <- data.frame(meas=c(1,1,1,2,2,2,3,3,3,4,4,4),
year=rep(c("y2016", "y2017","y2018")),
value=c(1,2,NA,NA,1,4,1,NA,3,1,5,10))
spread(df, year, value)
meas y2016 y2017 y2018
1 1 1 2 NA
2 2 NA 1 4
3 3 1 NA 3
4 4 1 5 10
答案 0 :(得分:0)
我认为您不需要绕开data.frame
,只要考虑周全地使用lead
就可以了:
df %>%
mutate(year = stringr::str_extract(year, "[0-9]+")) %>%
filter(!is.na(value)) %>%
group_by(meas) %>%
mutate(year2 = lead(year),
value2 = lead(value, order_by = year)) %>%
filter(!is.na(value2)) %>%
select(meas, year, year2, value, value2)
# A tibble: 5 x 5
# Groups: meas [4]
meas year year2 value value2
<dbl> <chr> <chr> <dbl> <dbl>
1 1 2016 2017 1 2
2 2 2017 2018 1 4
3 3 2016 2018 1 3
4 4 2016 2017 1 5
5 4 2017 2018 5 10