Как изменить значение в одном фрейме данных на основе другого фрейма данных? - PullRequest
0 голосов
/ 06 июля 2019

Привет! Мне нужна ваша помощь, чтобы изменить значения в одном фрейме данных на основе другого.Например, есть фреймы данных A и B. A имеет больше видов, чем B, но с теми же образцами.Теперь я хочу изменить значение во фрейме данных A на: 1) «Нет» для вида ( значения ), которых нет в фрейме данных B или нет в фрейме данных B для каждой выборки;2) «Да» для видов, которые не являются «NA» во фрейме данных B.

В реальных данных имеется много видов.

Фрейм данных A

       species1 species2    species3    species4    species5    species6
sample1 0.5       0.3          0          0.5          0           0.5
sample2 0.6       0.5          0          0.5          0.5         0
sample3 0.7       0.7          0          0            0           0
sample4 0.8       0.9          0.5        0.5          0           0
sample5 0.9       1.1          0.5        0.3          0           0.5

Фрейм данных B

        species2    species5    species3
sample1   NA          0.3         NA
sample2   NA          0.5         NA
sample3   0.7         NA          0.2
sample4   0.8         0.9         0.5
sample5   NA          NA          0.5

Ожидаемый результат, как показано ниже:

       species1 species2    species3    species4    species5    species6
sample1 No        No          No           No          Yes         No
sample2 No        No          No           No          Yes         No
sample3 No        Yes         Yes          No          No          No
sample4 No        Yes         Yes          No          Yes         No
sample5 No        No          Yes          No          No          No

Большое спасибо.

1 Ответ

0 голосов
/ 06 июля 2019

С dplyr, base и purrr:

    library(dplyr)
rep_at <- setdiff(names(df1),names(df2))
df1 %>% 
  mutate_at(vars(rep_at),function(x) x="No") -> df1
replacements <- as.data.frame(purrr::map(df2,function(y) 
    ifelse(is.na(y), "no","yes")),
    stringsAsFactors=F)
 df1[,match(names(replacements),names(df1))] <- replacements
  df1

Результат:

    species1 species2 species3 species4 species5 species6
1       No       no       no       No      yes       No
2       No       no       no       No      yes       No
3       No      yes      yes       No       no       No
4       No      yes      yes       No      yes       No
5       No       no      yes       No       no       No
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...