gpt4 book ai didi

r - dplyr 更改许多数据类型

转载 作者:行者123 更新时间:2023-12-03 05:55:57 25 4
gpt4 key购买 nike

我有一个数据框:

dat <- data.frame(fac1 = c(1, 2),
fac2 = c(4, 5),
fac3 = c(7, 8),
dbl1 = c('1', '2'),
dbl2 = c('4', '5'),
dbl3 = c('6', '7')
)

要更改数据类型,我可以使用类似的东西

l1 <- c("fac1", "fac2", "fac3")
l2 <- c("dbl1", "dbl2", "dbl3")
dat[, l1] <- lapply(dat[, l1], factor)
dat[, l2] <- lapply(dat[, l2], as.numeric)

dplyr

dat <- dat %>% mutate(
fac1 = factor(fac1), fac2 = factor(fac2), fac3 = factor(fac3),
dbl1 = as.numeric(dbl1), dbl2 = as.numeric(dbl2), dbl3 = as.numeric(dbl3)
)

dplyr 有没有更优雅(更短)的方法?

谢谢克里斯托夫

最佳答案

编辑(截至 2021-03)

正如 Eric's answer 中也指出的那样, mutate_[at|if|all] 已被 mutate()across() 的组合取代。作为引用,我将在原始答案中的示例中添加相应的吊坠(见下文):

# convert all factor to character
dat %>% mutate(across(where(is.factor), as.character))

# apply function (change encoding) to all character columns
dat %>% mutate(across(where(is.character),
function(x){iconv(x, to = "ASCII//TRANSLIT")}))

# subsitute all NA in numeric columns
dat %>% mutate(across(where(is.numeric), function(x) tidyr::replace_na(x, 0)))

原始答案

由于尼克的答案现已被弃用,并且拉斐尔的评论非常有用,因此我想将其添加为答案。如果您想将所有 factor 列更改为character,请使用mutate_if:

dat %>% mutate_if(is.factor, as.character)

还允许使用其他功能。例如,我使用 iconv 来更改所有 character 列的编码:

dat %>% mutate_if(is.character, function(x){iconv(x, to = "ASCII//TRANSLIT")})

或将数字列中的所有 NA 替换为 0:

dat %>% mutate_if(is.numeric, function(x){ifelse(is.na(x), 0, x)})

关于r - dplyr 更改许多数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668266/

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