проверка того, имеют ли два фрейма данных одинаковые значения в одной строке и столбце в R - PullRequest
1 голос
/ 29 мая 2020

У меня есть эти два фрейма данных

x = c(2,4,2,4,4,6)
y = c("hi", "xyz" ,"xyz" ,"xyz" ,"xyz" ,"xyz")
z = c(2,4,5,5,5,5)
dfa = data.frame(X = x, Y = y, Z = z)
dfa

   X  Y      Z
1  2  "hi"   2
2  4  "xyz"  4
3  2  "xyz"  5
4  4  "xyz"  5
5  4  "xyz"  5
6  6  "xyz"  5

И еще один с такими же строками и столбцами

x = c(2,7,8,2,4,6)
y = c("hi", "234" ,"xyz" ,"25" ,"xyz" ,"dfs")
z = c(20,4,5,3,1,5)
dfb = data.frame(X = x, Y = y, Z = z)
dfb

   X  Y      Z
1  2  "hi"   20
2  7  "234"  4
3  8  "xyz"  5
4  2  "25"   3
5  4  "xyz"  1
6  6  "dfs"  5

Я хочу получить количество раз для каждого столбца, которое значение в dfa совпадает с dfb

Итак, для этого примера вывод будет

    X   Y   Z
1   2   3   3

Пожалуйста, дайте мне знать, как это сделать. Большое спасибо

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы можете использовать mapply / Map:

mapply(function(x, y) sum(x== y), dfa, dfb)

Или аналогично map2_dbl в purrr, если предпочитаете tidyverse

purrr::map2_dbl(dfa, dfb, ~sum(.x == .y))

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

dfa <- dfa[names(dfb)]
0 голосов
/ 29 мая 2020

Мы можем использовать Map из base R

Map(function(x, y) sum(x == y, na.rm = TRUE), dfa, dfb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...