如何用 excel 文件中的数据替换某些列?

How can I replace some columns with data from an excel file?

我有一个问题。正如标题所说,现在我需要用来自另一个 excel 文件的新数据替换一些列。当满足某些要求时,我需要更换它们。

例如,我想用另一个excel文件中的新数据将R5列替换为APM(任意列header名称,仅作为示例),并且在替换之前应满足以下条件:

  1. replace with the same ID,也就是说我希望替换的时候每个人的ID都匹配
  2. 行中某列显示“N”时不替换。例如,如果一行中 R5 到 APM 之间的任何单元格有一个 N,则不要替换它。

基本上,我想确保数据完全匹配。

如何在 R 中完成此任务?或者,如何在 MS Excel 中实现它? 非常感谢您的帮助!我将非常感激每一个答案。

下面是一个例子:

以下为文字版截图:

身份证号码
11 2021/4/15 N 9/11/66 56.9 175 cm 标准测试 22 N/A
11 2021/7/29 Y 9/11/66 55.7 186 cm 标准测试 748 N/A 11 2021/7/29 Y TWCOVID 11 1966/11/9 F 白种人 157 54 NO NO

在下面的屏幕截图中,我想将ID为11的新数据替换为指示Y的行,并将旧数据替换为从R5开始到APM结束的新数据。我可以肯定地说,每个新数据的长度与旧数据的长度完全相同。

如果我对你的问题理解正确,你想做的事情可以通过函数merge()来实现。做?merge获取更多信息。

重要的是两个数据框中的列以相同的方式命名

示例如下:

在这里,您将读取两个数据集,然后确保具有匹配信息的列名称与下一个数据集相同(在您的情况下,您需要 ID ("ID ")、日期("date")、是否合并的决定("test")匹配。

library(readxl)
dt1 <- read_excel("path to dataset 1")
dt2 <- read_excel("path to dataset 2")
colnames(dt1)<- c("ID","date","test","DOB","weigth","height","other1","other2","other3")
colnames(dt2)<- c("ID","date","test","variable")

但为了示例,我正在重新创建您的两个数据集:

dt1 <- data.frame(ID = c(11,11),
                  date = c("2021/4/15", "2021/7/29"),
                  test = c("N", "Y"),
                  DOB = c("9/11/66", "9/11/66"),
                  weight = c(56.9, 55.7),
                  heigth = c(175, 186),
                  other1 = "Standard Test",
                  other2 = c(22, 748),
                  other3 = NA)

dt2 <- data.frame(ID = 11,
                  date = "2021/7/29",
                  test = "Y",
                  variable = "TWCOVID")

然后,您可以通过指定要使用的列(尽管该函数会自动识别相同的列名称)并指定 all.x = TRUE 来合并 dt1 和 dt2 以表示所有来自数据框 x(第一个)的行必须被保留。根据您想要实现的目标,检查 allall.x 之间的区别。

dt <- merge(x = dt1, y = dt2[dt2$test == "Y", ], by = c("ID", "date", "test"), all.x = TRUE)

它为您提供:(最后一列是您想要的信息。

然后,导出到excel:

library(writexl)
write_xlsx(dt)