0

我想将这行代码推广到 tibble 的所有列:

starwars_with_species_as_last_column <- starwars %>% 
  select(1:11) # not interested in generalising this

starwars_with_species_as_last_column %>% 
  transmute(text = str_c("gender_", gender, " homeworld_", homeworld, "\n", species))

因此,我正在考虑一个函数,该函数将具有 n 列的小标题作为输入,并应用 n-1 次连接 col1name_col1content、col2name_col2content 和最后一次与最后一列不同的连接。

我想我可以使用传统的 if 语句来完成,迭代所有列。但它会更好地做到 tidyverse 风格。我想purrr这里需要,但我无法让它工作。

另外,我肯定需要准引用来获取每次列内容之前的列名,例如gender_masculine。

4

1 回答 1

0

gather这是使用and的一种可能方法paste

starwars %>%
  select(1:11) %>%
  mutate(row = 1:n()) %>% 
  gather(coln, value, -row) %>%
  group_by(row) %>%
  summarise(
    text = paste(
      paste(coln[-n()], value[-n()], sep = "_", collapse = "_"), 
      "\n",
      paste(last(coln), last(value), sep = "_")
    )
  )
于 2021-11-28T15:26:32.017 回答