2017-12-04 10 views
2

たとえば、整数列と因子列の両方を持つdata.frameがあります。非因子列に影響を与えずにすべての因子列を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を整数として保持したいと思います。

私はfollwingコードを試みた:

sapply(data, function(x) {if_else(is.factor(x), as.character(x), x)})

代わりの結果を取得し、それがエラーをスローします:

Error: true must be length 1 (length of condition), not 5

私は、これはdplyrでmutate_if機能によって行うことができます知っていました。しかし、私はまだ私のコードがこの場合には機能しないのだろうと思っています。

ありがとうございました!

答えて

3

あなたは試すことができます:

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) 
を試すことができます
関連する問題