例如,我有一个既有整数列又有因子列的data.frame。

data <- data.frame(
    a = 1:5,
    b = factor(c("a", "b", "c", "d", "e")),
    c = factor(c("f", "g", "h", "i", "j")))`

我想将b和c因数列转换为字符,同时将a列保持为整数。

我尝试了以下代码:
sapply(data, function(x) {if_else(is.factor(x), as.character(x), x)})
而不是得到结果,它引发了一个错误:



我知道这可以通过dplyr中的mutate_if函数来完成。但是我仍然想知道为什么我的代码在这种情况下不起作用。

非常感谢您的任何建议!

最佳答案

你可以试试:

library(tidyverse)
d <- data.frame(a = 1:5,
                b = factor(c("a", "b", "c", "d", "e")),
                c = factor(c("f", "g", "h", "i", "j")))
d %>% glimpse()
Observations: 5
Variables: 3
$ a <int> 1, 2, 3, 4, 5
$ b <fctr> a, b, c, d, e
$ c <fctr> f, g, h, i, j

d %>%
  mutate_if(is.factor, as.character) %>%
  glimpse()
Observations: 5
Variables: 3
$ a <int> 1, 2, 3, 4, 5
$ b <chr> "a", "b", "c", "d", "e"
$ c <chr> "f", "g", "h", "i", "j"

使用基数R可以尝试
d[] <- lapply(d, function(x) if(is.factor(x)) as.character(x) else x)

关于r - 将所有因子列转换为data.frame中的字符,而不影响非因子列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47633241/

10-13 08:36