Удаление разных значений из каждого столбца фрейма данных - PullRequest
0 голосов
/ 15 октября 2018

У меня есть следующие предметы

A<-data.frame(replicate(5,c(1,2,3,4)))
A=   X1 X2 X3 X4 X5
     1  1  1  1  1
     2  2  2  2  2
     3  3  3  3  3
     4  4  4  4  4

B<-c(1,2,3,4,1)

B = 1 2 3 4 5

Я хочу найти способ удаления первого элемента B из первого столбца A, второго элемента B из второго столбца A и т. Д.на так я получаю следующий результат

A=   X1 X2 X3 X4 X5
     2  1  1  1  2
     3  3  2  2  3
     4  4  4  3  4

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

A purrr решение:

A<-data.frame(replicate(5,c(1,2,3,4)))
# X1 X2 X3 X4 X5
# 1  1  1  1  1  1
# 2  2  2  2  2  2
# 3  3  3  3  3  3
# 4  4  4  4  4  4

B<-c(1,2,3,4,1)
# [1] 1 2 3 4 1

purrr::map2_df(A, B, ~.x[.x != .y]) # function(x,y) x[x != y]

# # A tibble: 3 x 5
# X1    X2    X3    X4    X5
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1     2     1     1     1     2
# 2     3     3     2     2     3
# 3     4     4     4     3     4 
0 голосов
/ 15 октября 2018

Используя mapply, мы можем передать A и B параллельно и отфильтровать значения, которых нет в B

mapply(function(x, y) x[x != y], A, B)

#     X1 X2 X3 X4 X5
#[1,]  2  1  1  1  2
#[2,]  3  3  2  2  3
#[3,]  4  4  4  3  4

PS - Убедитесь, что ncol(A) и length(B) одинаковы, в противном случае это приведет к переработке вектора, что даст некоторые неожиданные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...