【发布时间】:2020-11-02 16:59:23
【问题描述】:
我有一个关于在 R 中合并数据帧后在输出数据帧中打印新列(是/否)的问题。
我有两个输入文件 1 和 2,其中包含 A 列中常见的 ID,以及其他列中的后续信息(输入文件示例如下所示)。我想要的是基于 ID 列合并两个文件并在输出数据帧中打印是/否信息(输出文件的示例如下所示)。出于合并的目的,我一直在使用 merge 函数或 library(tidyverse)in 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))
谢谢,
图菲克
【问题讨论】:
-
问个简单的问题,你有必要使用列表而不是数据框吗?
-
我猜
mutate(merged = ID %in% File_2$ID)应该可以解决问题。 -
嗨@oscartorom,这是一个例子,我也使用了合并功能,例如,Merged_df
标签: r dataframe merge tidyverse