我有两个数据框,A和B.第一个数据框包含年份,组名和名称。第二个数据帧记录完整的组列表。我想在A数据帧中创建一个变量。如果A数据框中的名称出现在B的年份/组列表中,则应将其编码为“Y”,否则为“N”。
数据框和B数据框是:
A <- data.frame(year = c("2000", "2000", "2000", "2000", "2002", "2002", "2003", "2003", "2003"), group = c("Star", "Star", "Sun", "Sun", "Mars", "Earth", "Earth", "Star", "Star"), name = c("John", "Bill", "Summer", "Evans", "Ben", "Mary", "Kally", "John", "Carl"))
B <- data.frame(year = c("2000", "2000", "2000", "2000", "2000", "2002", "2002","2002", "2003", "2003", "2003", "2003", "2003"), group = c("Star", "Star", "Star", "Sun", "Sun", "Mars", "Mars","Earth", "Earth", "Star", "Star", "Star", "Star"), namelist = c("John", "Helen", "Gray", "Summer", "Evans", "Kevin", "Ben", "Ring", "Steve", "Billy", "Carl", "Michel", "John"))
例如,在2000年,B数据框显示Star有John,Helen和Gray。因此,因为2000年的数据帧的Star有John和Carl,A数据帧的新变量的前两行是“Y”和“N”。结果应该是这样的:
year group name in_the_list
1 2000 Star John Y
2 2000 Star Bill N
3 2000 Sun Summer Y
4 2000 Sun Evans Y
5 2002 Mars Ben Y
6 2002 Earth Mary N
7 2003 Earth Kally N
8 2003 Star John Y
9 2003 Star Carl Y
答案 0 :(得分:1)
将列粘贴到表单ID并检查它是否存在于B
中使用dplyr包:
A$in_the_list <- c("N", "Y")[Reduce(paste, A) %in% Reduce(paste, B) + 1]
使用基本功能:
Preference
答案 1 :(得分:0)
您可以利用dplyr
的{{1}},它返回另一个数据框架的行:
semi_join