Как напечатать новый столбец после объединения двух фреймов данных в R - PullRequest
1 голос
/ 13 июля 2020

У меня есть вопрос о печати нового столбца во фрейме выходных данных (Да / Нет) после объединения фреймов данных в R.

У меня есть два входных файла 1 и 2, которые содержат общий идентификатор в столбце A и последующая информация в других столбцах (Примеры входных файлов показаны ниже). Я хотел бы объединить оба файла на основе столбца идентификатора и распечатать информацию Да / Нет в выходном фрейме данных (пример выходного файла показан ниже). Для слияния я использовал функцию merge или library(tidyverse) в R. Пожалуйста, помогите мне с этим.

File_1 <- read.csv(file = "./File_1.csv", stringsAsFactors = FALSE, check.names = FALSE)
File_2 <- read.csv(file = "./File_2.csv", stringsAsFactors = FALSE, check.names = FALSE)
Files_Merge <- list(File_1, File_2) %>% reduce(full_join, by = "ID")

> dput(File_2)
structure(list(ID = c(1121015L, 1125006L, 4121014L, 2721015L, 
2221014L, 2321015L, 5121013L, 10221003L, 6525003L, 1121001L, 
1021001L, 1221001L, 1321001L, 1421001L), Type = c("R", "R", "R", 
"R", "R", "R", "R", "R", "R", "R", "R", "R", "R", "R"), new = c(1121015L, 
1125006L, 4121014L, 2721015L, 2221014L, 2321015L, 5121013L, 10221003L, 
6525003L, 1121001L, 1021001L, 1221001L, 1321001L, 1421001L), 
    collect = c("D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", 
    "D9", "D10", "D11", "D12", "D13", "D14"), Type_v1 = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Type_v2 = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Freezer = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Comment = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-14L))
> dput(File_2)
structure(list(ID = c(1121015L, 1125006L, 4121014L, 2721015L, 
2221014L, 2321015L, 5121013L, 10221003L, 6525003L), Date = c("D1", 
"D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9"), num = c("5:30", 
"5:49", "5:30", "6:30", "6:30", "5:47", "9:30", "9:15", "9:10"
), B = c("A", "A", "A", "A", "A", "A", "A", "A", "A"), P = c("11", 
"5-011", "41", "27", "22", "23", "51", "102", "5-065")), class = "data.frame", row.names = c(NA, 
-9L))



 > dput(Files_Merge_output)
structure(list(ID = c(1121015L, 1125006L, 4121014L, 2721015L, 
2221014L, 2321015L, 5121013L, 10221003L, 6525003L, 1121001L, 
1021001L, 1221001L, 1321001L, 1421001L), Merged = c("Yes", "Yes", 
"Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", 
"No", "No", "No"), Type = c("R", "R", "R", "R", "R", "R", "R", 
"R", "R", "R", "R", "R", "R", "R"), new = c(1121015L, 1125006L, 
4121014L, 2721015L, 2221014L, 2321015L, 5121013L, 10221003L, 
6525003L, 1121001L, 1021001L, 1221001L, 1321001L, 1421001L), 
    collect = c("D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", 
    "D9", "D10", "D11", "D12", "D13", "D14"), Type_v1 = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Type_v2 = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Freezer = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Comment = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Date = c("D1", 
    "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", NA, NA, NA, 
    NA, NA), num = c("5:30", "5:49", "5:30", "6:30", "6:30", 
    "5:47", "9:30", "9:15", "9:10", NA, NA, NA, NA, NA), B = c("A", 
    "A", "A", "A", "A", "A", "A", "A", "A", NA, NA, NA, NA, NA
    ), P = c("11", "5-011", "41", "27", "22", "23", "51", "102", 
    "5-065", NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-14L))

Спасибо,

Toufiq

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Вы можете использовать dplyr и расширить свой код:

list(File_1, File_2) %>% 
  reduce(full_join, by = "ID") %>%
  mutate(Merged = ifelse(ID %in% File_2$ID, "Yes", "No"))

возвращает

         ID Type      new collect Type_v1 Type_v2 Freezer Comment Date  num    B     P Merged
1   1121015    R  1121015      D1       1       1       1      NA   D1 5:30    A    11    Yes
2   1125006    R  1125006      D2       1       1       1      NA   D2 5:49    A 5-011    Yes
3   4121014    R  4121014      D3       1       1       1      NA   D3 5:30    A    41    Yes
4   2721015    R  2721015      D4       1       1       1      NA   D4 6:30    A    27    Yes
5   2221014    R  2221014      D5       1       1       1      NA   D5 6:30    A    22    Yes
6   2321015    R  2321015      D6       1       1       1      NA   D6 5:47    A    23    Yes
7   5121013    R  5121013      D7       1       1       1      NA   D7 9:30    A    51    Yes
8  10221003    R 10221003      D8       1       1       1      NA   D8 9:15    A   102    Yes
9   6525003    R  6525003      D9       1       1       1      NA   D9 9:10    A 5-065    Yes
10  1121001    R  1121001     D10       1       1       1      NA <NA> <NA> <NA>  <NA>     No
11  1021001    R  1021001     D11       1       1       1      NA <NA> <NA> <NA>  <NA>     No
12  1221001    R  1221001     D12       1       1       1      NA <NA> <NA> <NA>  <NA>     No
13  1321001    R  1321001     D13       1       1       1      NA <NA> <NA> <NA>  <NA>     No
14  1421001    R  1421001     D14       1       1       1      NA <NA> <NA> <NA>  <NA>     No
1 голос
/ 13 июля 2020

Вы можете попробовать это. Я использовал ваши dput() данные:

#Create a Flag in file2
file2$flag <- 1
#Merge
Merged <- merge(file1,file2,by='ID',all.x=T)
#Format flag
Merged$Merged <- ifelse(is.na(Merged$flag),'No','Yes')
Merged$flag <- NULL
Merged <- Merged[,c(1,13,2:12)]

Некоторые столбцы показаны здесь из-за пробела:

         ID Merged Type      new collect Type_v1 Type_v2 Freezer Comment Date  num
1   1021001     No    R  1021001     D11       1       1       1      NA <NA> <NA>
2   1121001     No    R  1121001     D10       1       1       1      NA <NA> <NA>
3   1121015    Yes    R  1121015      D1       1       1       1      NA   D1 5:30
4   1125006    Yes    R  1125006      D2       1       1       1      NA   D2 5:49
5   1221001     No    R  1221001     D12       1       1       1      NA <NA> <NA>
6   1321001     No    R  1321001     D13       1       1       1      NA <NA> <NA>
7   1421001     No    R  1421001     D14       1       1       1      NA <NA> <NA>
8   2221014    Yes    R  2221014      D5       1       1       1      NA   D5 6:30
9   2321015    Yes    R  2321015      D6       1       1       1      NA   D6 5:47
10  2721015    Yes    R  2721015      D4       1       1       1      NA   D4 6:30
11  4121014    Yes    R  4121014      D3       1       1       1      NA   D3 5:30
12  5121013    Yes    R  5121013      D7       1       1       1      NA   D7 9:30
13  6525003    Yes    R  6525003      D9       1       1       1      NA   D9 9:10
14 10221003    Yes    R 10221003      D8       1       1       1      NA   D8 9:15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...