如何在 dplyr 链中将数据框连接到自身?
How to join a data frame to itself within a dplyr chain?
有时,我需要在 dplyr 链中将数据框加入到它自身的(通常是修改后的)版本中。像这样:
df <- data.frame(
id = c(1,2,3)
, status = c('foo','bar','meh')
, spouseid = c(4,3,2)
)
df %>%
filter( status == 'foo' | status == 'bar') %>%
# join the filtered table to itself using the dot as the right-hand side
left_join(., by = c('id' = 'spouseid'))
当我尝试这样做时,我得到 Error in is.data.frame(y) : argument "y" is missing, with no default
。
问题是使用点只是在左手边移动,所以上面写的方式只是将 lhs 传递到 left_join()
。要在左侧和右侧都使用圆点,请使用圆点两次:
df %>%
filter( status == 'foo' | status == 'bar') %>%
# the first dot is x argument and the second dot is the y argument
left_join(
x = .
, y = .
, by = c('id' = 'spouseid')
)
这样,您将 lhs 传递给 left_join()
的两个参数,而不是像通常那样依赖 magrittr 的隐式 lhs。
有时,我需要在 dplyr 链中将数据框加入到它自身的(通常是修改后的)版本中。像这样:
df <- data.frame(
id = c(1,2,3)
, status = c('foo','bar','meh')
, spouseid = c(4,3,2)
)
df %>%
filter( status == 'foo' | status == 'bar') %>%
# join the filtered table to itself using the dot as the right-hand side
left_join(., by = c('id' = 'spouseid'))
当我尝试这样做时,我得到 Error in is.data.frame(y) : argument "y" is missing, with no default
。
问题是使用点只是在左手边移动,所以上面写的方式只是将 lhs 传递到 left_join()
。要在左侧和右侧都使用圆点,请使用圆点两次:
df %>%
filter( status == 'foo' | status == 'bar') %>%
# the first dot is x argument and the second dot is the y argument
left_join(
x = .
, y = .
, by = c('id' = 'spouseid')
)
这样,您将 lhs 传递给 left_join()
的两个参数,而不是像通常那样依赖 magrittr 的隐式 lhs。