gpt4 book ai didi

在 lapply tidy 期间即时重命名列

转载 作者:行者123 更新时间:2023-12-04 10:12:50 25 4
gpt4 key购买 nike

我想在使用过程中即时命名/重命名数据框/tibble的列lapply操作。例如:

df <- tibble(names = rep("abc",100), 
number1 = sample(1:1000, size = 100),
number2 = sample(10:900, size = 100),
char_1 = sample(c("a","b","c"), size = 100, replace = TRUE),
number3 = round(rnorm(100, mean = 100)))
files_names <- df %>%
distinct(char_1 ) %>%
deframe %>% as.list()
names(files_names) <- files_names
lapply()
df_a <- df %>% filter(char_1 == "a")

lst_files <- lapply(files_names, function(x){
df %>% filter(char_1 == x) %>%
mutate(str_glue("{x}_num3") = number3 +100)
})

Error: unexpected '=' in:
" df %>% filter(char_1 == x) %>%
mutate(str_glue("{x}_num3") ="
})
Error: unexpected '}' in "}"

在这个例子中,我使用了 mutate 函数,当然,我得到了一个错误,

但一般来说,我需要使用lapply 中的选择/重命名或变异操作

最好结合 str_glue 函数或粘贴。感谢您的宝贵时间!

最佳答案

这里我们可以使用:=进行赋值。使用 tidyverse,我们可以使用 map 遍历 list 元素(类似于 base 中的 lapply R),然后在根据传入 map 的唯一元素过滤行之后,创建一个带有 mutate 的列使用赋值运算符 (:=),通过传递字符串并求值 (!!)。 str_c 执行与 base R 中的 paste 类似的操作,除了当有 NA 时它的行为略有不同

library(purrr)
library(stringr)
map(files_names, ~
df %>%
filter(char_1 == .x) %>%
mutate(!!str_c(.x, "_num3") := number3 + 100))

关于在 lapply tidy 期间即时重命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com