У меня есть список:
pr <- list(x = c("a", "b", "c"),
y = c("a", "b"),
z = c("a"))
и фрейм данных df
:
> dput(df)
structure(list(m = c("x", "y", "x", "y", "x", "x", "z", "y",
"z"), order = c(2, 3, 0, 0, 0, 0, 2, 0, 0), a = c(0, 0, -1, -1,
0, 0, 0, -1, -1), b = c(0, 0, 0, 0, -1, 0, 0, 0, 0), c = c(0,
0, 0, 0, 0, -1, 0, 0, 0)), .Names = c("m", "order", "a", "b",
"c"), row.names = c(NA, -9L), class = c("tbl_df", "tbl", "data.frame"
))
, который выглядит следующим образом
> dff
# A tibble: 9 x 5
m order a b c
<chr> <dbl> <dbl> <dbl> <dbl>
1 x 2.00 0 0 0
2 y 3.00 0 0 0
3 x 0 -1.00 0 0
4 y 0 -1.00 0 0
5 x 0 0 -1.00 0
6 x 0 0 0 -1.00
7 z 2.00 0 0 0
8 y 0 -1.00 0 0
9 z 0 -1.00 0 0
Теперь, еслизначение в order
равно больше , чем ноль, проверьте соответствующее значение в m
и добавьте order
-значение только к тем столбцам , названия которых соответствуют до значения m
в списке pr
.
Итак, желаемый вывод должен выглядеть так:
m order a b c
<chr> <dbl> <dbl> <dbl> <dbl>
1 x 2.00 2.00 2.00 2.00 (since x = c("a", "b", "c")
2 y 3.00 3.00 3.00 0 (since y = c("a", "b")
3 x 0 -1.00 0 0
4 y 0 -1.00 0 0
5 x 0 0 -1.00 0
6 x 0 0 0 -1.00
7 z 2.00 2.00 0 0 (since z = c("a")
8 y 0 -1.00 0 0
9 z 0 -1.00 0 0
Я пытался атаковать это с помощью mutate_at
, quosures, !!
но теперь я застрял.
Любая помощь будет очень цениться.Заранее спасибо!