嘗試使用 mutate 根據變數值創建一個新列:
for (var in custom_vars) {
devices_ <-
devices %>%
mutate(var = grepl({{var}}, cluster, fixed = TRUE) %>% as_factor())
}
但它不起作用。該列是使用正確的布林值創建的,但名稱設定為“var”。如何按預期將新列設定為 var 的值。
uj5u.com熱心網友回復:
使用greplin很簡單sapply,因為它已經給出:
sapply(custom_vars, grepl, dat$cluster)
# a b
# [1,] TRUE TRUE
# [2,] TRUE FALSE
# [3,] FALSE TRUE
# [4,] FALSE FALSE
然后只是cbind它到初始資料幀。
cbind(dat, sapply(custom_vars, grepl, dat$cluster))
# cluster x a b
# 1 abk 0.06279684 TRUE TRUE
# 2 akl 0.36972330 TRUE FALSE
# 3 bkl 0.80486702 FALSE TRUE
# 4 klm 0.32781444 FALSE FALSE
資料:
dat <- data.frame(cluster=c('abk', 'akl', 'bkl', 'klm'), x=runif(4))
uj5u.com熱心網友回復:
如果您提供具有預期輸出的示例資料,可用于驗證答案,則更容易提供幫助。
我試圖根據我的理解創建一個示例資料。
library(dplyr)
df <- data.frame(a = 1:3, b = 3:1, cluster = c('abc', 'rds', 'dsb'))
# a b cluster
#1 1 3 abc
#2 2 2 rds
#3 3 1 dsb
custom_vars <- c('a', 'b')
我們可以使用across代替for回圈。
df <- df %>%
mutate(across(all_of(custom_vars), ~factor(grepl(cur_column(), cluster))))
str(df)
#'data.frame': 3 obs. of 3 variables:
# $ a : Factor w/ 2 levels "FALSE","TRUE": 2 1 1
# $ b : Factor w/ 2 levels "FALSE","TRUE": 2 1 2
# $ cluster: chr "abc" "rds" "dsb"
cur_column()回傳用于grepl查找模式的當前列名的名稱,然后將邏輯值 ( TRUE/ FALSE) 更改為factor.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/394659.html
