r - 如何在变异的函数(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_ref
从penguins_ref
.
谢谢你。
解决方案
我不太确定您期望的最终输出是什么,但也许这就是您所追求的?
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
; 然后再次整形以恢复原始的宽格式。
请注意,这似乎是一种尴尬的格式:height
andweight
是list
列,其中一些条目是tibble
s,而另一些是标量。
推荐阅读
- php - Symfony 4.4 - 返回我的用户(getUser())的 JSON 响应,但我只 GET NULL:安全问题?
- python - 如何在同一模板中传递另一个模型的列表视图和另一个模型的详细视图
- kotlin - 是否有任何操作可以将第一个数组中的每个元素与 Kotlin 中第二个数组中的每个元素相乘?
- javascript - Ajax 忽略 URL
- mysql - 当从另一个表中选择一个值时插入
- sql-server - 选择不在另一个表中的键需要很长时间
- google-sheets - 如何在谷歌表格查询的选择子句中连接字符串?
- angular - 角度7中的未定义变量
- amazon-web-services - AWS 的 cloudformation 模板中无法识别术语“事件:”
- python - 启动powershell时无法禁用python环境/虚拟