为此使用虚拟数据,我有两个数据框:
一个是按性别划分的测量的位置及其排名列表(df1)
Locations Male Female
1 A 1 2
2 B 2 1
3 C 1 2
另一个是人员列表
Name Gender Location
1 Joe Male A
2 Alex Female B
3 Chris Female A
4 Sam Male C
我想在第二个数据框(df2 $ Value)中添加一列,根据其性别和位置为第一个数据框中的每个人提供相应的数字。 (所以在这种情况下,结果将是1,1,2,1)。
我尝试过使用合并和一些条件陈述,但无济于事。
答案 0 :(得分:4)
将df1转换为具有匹配名称的堆叠格式:
df1 <- df1 %>% gather(Gender, Value, Male:Female)
names(df1)[names(df1)=="Locations"] <- "Location"
使用left_join
将Value
与Gender
和Location
匹配:
df2 %>% left_join(df1)
# Name Gender Location Value
# 1 Joe Male A 1
# 2 Alex Female B 1
# 3 Chris Female A 2
# 4 Sam Male C 1