Добавить другое значение (по группам) к другому значению в кадре данных в R - PullRequest
0 голосов
/ 14 июня 2019

У меня есть два фрейма данных, я хочу вычесть значение столбца в одном фрейме данных в другой, если фреймы данных равны по значению другому столбцу.

У меня есть два кадра данных A и B, которые похожи на следующие:

[A]
Col1   Col2
 1      cat
 2      dog
 3      bird
 4      cat
 5      dog

[B]
 Col1    Col2
[cat]   1
[dog]   2
[bird]  3

Я хочу иметь возможность добавить значения A$Col1 + B$Col2, если A$Col2 соответствует тегу [B], и создать список с результатами, длина которых будет равна длинам строк в [A]

Я пробовал этот код

(A$Col1-B$Col2)[A$Col2==B$Col1]

, который, кажется, работает, но появляется следующее предупреждение:

длина объекта не кратна длине объекта

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Используйте Left_Join, а затем создайте новый столбец для разницы.

merge(A, B, by.x = "Col2", by.y = "Col1", all.x = TRUE) %>% mutate(Difference = Col1 - Col2.y )

 Col2 Col1 Col2.y Difference
1 bird    3      3          0
2  cat    1      1          0
3  cat    4      1          3
4  dog    2      2          0
5  dog    5      2          3
0 голосов
/ 14 июня 2019

Вот пример стиля tidyverse для объединения двух фреймов данных и вычитания столбцов. Затем вы можете взять новый столбец и преобразовать его в список или все, что вам нужно.

library(tidyverse)

A <- tibble(
  Col1 = 1:5, 
  Col2 = c("cat", "dog", "bird", "cat", "dog")
)
B <- tibble(
  Col1 = c("cat", "dog", "bird"),
  Col2 = 1:3
)

A %>% 
  left_join(B, by = c("Col2" = "Col1")) %>% 
  mutate(Col3 = Col1 - Col2.y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...