按行中的行名和列匹配数据

时间:2015-10-21 11:03:16

标签: r dataframe match

我们可以在R中创建两个data.frame:

Y1 <- c(14,12,11,12)
Y2 <- c(13,10,15,16)

df1 <- data.frame(Y1,Y2)
rownames(df1) <- c('boy','girl','man','woman')


A <- 1:5
type_y <- c(1,1,2,1,2)
SEX <- c('boy','girl','boy','man','woman')
df2 <- data.frame(A,type_y,SEX)

我想在df2中创建一个新变量,比如x,匹配

  • SEX使用df1&amp;
  • 中的rowname
  • Type_y值及相应的Y1 | Y2

所以我们的df2$x == 14,12,13,11,16

1 个答案:

答案 0 :(得分:1)

我们通过match'df2'的'SEX'和'df1'('i1')的行名创建数字索引。我们根据'i1',cbind('m1')得到'Y1'和'Y2'的相应元素,根据行(1:nrow(df2))列提取'm1'的元素(df2$type_y)索引。

 i1 <- match(df2$SEX, row.names(df1))
 m1 <- cbind(df1$Y1[i1], df1$Y2[i1])
 df2$x <- m1[cbind(1:nrow(df2), df2$type_y)]
 df2$x
 #[1] 14 12 13 11 16