R:使用现有列中的值来索引另一个数据帧

时间:2018-04-20 15:50:48

标签: r dplyr

(道歉,如果重复:我看了一下,找不到这个问题)。

我正在尝试在dataframe1中创建一个新列,该列将基于dataframe2中的值。对于每一行,我想从dataframe2获取的值的索引分为两列: lineno 是行, position 是列。

DF1:

      lineno position
1      1        1
2      1        9
3      2       11
4      2        3
5      2       17

这似乎很简单;我以为我可以用:

df1 %>% mutate(new_col = df2[lineno, position])

但这似乎会返回整个数据帧?对于df1$new_col中的每一行,结果为<data.frame [1,000 × 5,714]>

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我建议您将purrr添加到您的保留曲目中:

df1 <- read.table(text='      lineno position
1      1        1
2      1        9
3      2       11
4      2        3
5      2       10', header=TRUE)
df2 <- mtcars

library(dplyr)
library(purrr)
df1 %>% mutate(
  new_col = map2(lineno, position, ~ df2[.x,.y])
)
#   lineno position new_col
# 1      1        1      21
# 2      1        9       1
# 3      2       11       4
# 4      2        3     160
# 5      2       10       4

如果您使用某个特定的map2_变体,例如map2_dbl,则可以“更安全”。

答案 1 :(得分:1)

对于dplyr,您可以添加rowwise

df1 %>%rowwise()%>%  mutate(new_col = df2[lineno, position])