(道歉,如果重复:我看了一下,找不到这个问题)。
我正在尝试在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]>
有什么想法吗?
答案 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])