根据其他数据帧中的两列筛选数据帧

  • 本文关键字:数据帧 两列 筛选 其他 r
  • 更新时间 :
  • 英文 :


我相信这个问题的答案与这个问题非常相似,但我只是不能完全把它放在一起。

我有两个数据帧。一个是我正在处理的数据帧:

df<-structure(list(Username = c("hmaens", "pgcmann", "gsamse", "gsamse", 
"gsamse", "gamse"), Title = c("Pharmacy Resident PGY2", "Associate Professor of Pediatrics", 
"Regulatory Coordinator", "Regulatory Coordinator", "Regulatory Coordinator", 
"Regulatory Coordinator"), `User Role` = c("Investigational Pharmacist", 
"Principal Investigator", "Calendar Build", "Protocol Management", 
"Subject Management", "Regulatory")), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

一个是关键:

key<-structure(list(username = c("hmaens", "pgcmann", "gsamse", "gsamse", 
"gsamse", "gsamse"), training = c(0, 0, 1, 
1, 1, 1)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

我想把我的";df";基于";训练";键中的列。即,我的结果将是一个名为dfZero的数据帧,该数据帧具有与df完全相同的列;0";在训练中。还有一个名为dfOne的独立数据帧,其中包含来自key$training的1。

使用%in%

dfZero <- df[df$Username %in% key[key$training == 0, "username"],]
dfOne <- df[df$Username %in% key[key$training == 1, "username"],]

使用merge()

dfZero <- merge(df, key[key$training == 0,], by.x = "Username", by.y = "username")
dfOne <- merge(df, key[key$training == 1,], by.x = "Username", by.y = "username")

使用dplyr:

library(dplyr)
dflist <- merge(df, key, by.x = "Username", by.y = "username") %>%
unique() %>%
group_by(training) %>%
group_split() 

编辑:您可以提取单个列表元素,如:

dfzero <- dflist[[1]]
dfone <- dflist[[2]]

最新更新