Я уверен, что об этом уже спрашивали, но мне трудно его найти. Мне нужно поместить фрейм данных в одну строку и вычесть эти значения из соответствующих столбцов.
Я действительно нашел Вычтите значения одной строки из всех соответствующих столбцов в фрейме данных , что обеспечило решение (см. Ниже), но должен быть более простой способ, верно? tidyverse
решение будет наиболее ценно.
Пример
Вот пример фрейма данных:
df <- as_tibble(matrix(1:9, 3, 3))
## A tibble: 3 x 3
# V1 V2 V3
# <int> <int> <int>
#1 1 4 7
#2 2 5 8
#3 3 6 9
Вычитание кадров данных одинакового размера - не проблема.
df - df
# V1 V2 V3
#1 0 0 0
#2 0 0 0
#3 0 0 0
Задача
Но когда я помещаю df
в одну строку и пытаюсь вычесть, он не может вычесть неравные кадры данных. Я подмножество df
как
df[1, ]
## A tibble: 1 x 3
# V1 V2 V3
# <int> <int> <int>
#1 1 4 7
Мое желаемое решение вычтет 1 из каждого значения в первом столбце, 4 из каждого значения во втором и 7 из каждого в третьем, так что это результат:
## A tibble: 3 x 3
# V1 V2 V3
# <int> <int> <int>
#1 0 0 0
#2 1 1 1
#3 2 2 2
Попытка этого приводит к ошибке:
df - df[1, ]
#Error in Ops.data.frame(df, df[1, ]) :
# ‘-’ only defined for equally-sized data frames
В ссылке выше я нашел это решение, которое работает:
as_tibble(Map(`-`, df, df[1, ]))
## A tibble: 3 x 3
# V1 V2 V3
# <int> <int> <int>
#1 0 0 0
#2 1 1 1
#3 2 2 2
Но это решение кажется действительно сложным и его нелегко включить в серию каналов.
У кого-нибудь есть идеи?