首页 > 解决方案 > 如何在变异的函数(x)中获取数据帧值 x 的列名?

问题描述

我想知道如何在函数内部获取 x 的列名。

library(tidyverse)
library(palmerpenguins)

data("penguins")
data("starwars")

penguins_ref <- penguins %>% 
  filter(species != "Chinstrap") %>% 
  select(1, 3:6) %>% 
  mutate(species = case_when(species == "Adelie" ~ "height",
                             species == "Gentoo" ~ "mass")) %>% 
  nest(data= -species) 

starwars_ref <- starwars %>% 
  select(c("name","height","mass")) %>% 
  mutate_at(c("height", "mass"),
            function(x) 
              (ifelse(x > 90,
                      penguins_ref[penguins_ref$species == colnames(x), "data"],
                      0
                      )))

在上面的代码中,我无法从penguins_ref[penguins_ref$species == colnames(x), "data"],我希望在starwars_refpenguins_ref.

谢谢你。

标签: rdplyrtidyverse

解决方案


我不太确定您期望的最终输出是什么,但也许这就是您所追求的?

starwars %>%
    select(name, height, mass) %>%
    pivot_longer(-name, names_to = "species") %>%
    left_join(penguins_ref, by = "species") %>%
    mutate(value = if_else(value > 90, data, list(value))) %>%
    select(-data) %>%
    pivot_wider(names_from = "species", values_from = "value")
## A tibble: 87 x 3
#      name               height             mass              
#      <chr>              <list>             <list>            
#    1 Luke Skywalker     <tibble [152 x 4]> <dbl [174]>       
#    2 C-3PO              <tibble [152 x 4]> <dbl [174]>       
#    3 R2-D2              <tibble [152 x 4]> <dbl [174]>       
#    4 Darth Vader        <tibble [152 x 4]> <tibble [124 x 4]>
#    5 Leia Organa        <tibble [152 x 4]> <dbl [174]>       
#    6 Owen Lars          <tibble [152 x 4]> <tibble [124 x 4]>
#    7 Beru Whitesun lars <tibble [152 x 4]> <dbl [174]>       
#    8 R5-D4              <tibble [152 x 4]> <dbl [174]>       
#    9 Biggs Darklighter  <tibble [152 x 4]> <dbl [174]>       
#    10 Obi-Wan Kenobi     <tibble [152 x 4]> <dbl [174]>       
#    # ... with 77 more rows

starwars这个想法是从宽到长重塑,然后连接数据penguins_ref并用数据替换值 if value > 90; 然后再次整形以恢复原始的宽格式。

请注意,这似乎是一种尴尬的格式:heightandweightlist列,其中一些条目是tibbles,而另一些是标量。


推荐阅读