2015-12-07 102 views
4

我需要將很多數字列轉換爲因子類型。 一個例子表:R-應用 - 將多列從數字轉換爲因子

df <- data.frame(A=1:10, B=2:11, C=3:12) 

我試着申請:

cols<-c('A', 'B') 
df[,cols]<-apply(df[,cols], 2, function(x){ as.factor(x)}); 

但結果是一個字符類。

> class(df$A) 
[1] "character" 

我該如何做到這一點,而不是爲每列做as.factor?

+2

你有正確的想法,但'apply'將返回不承認因素矩陣。但數據框呢。 –

回答

6

嘗試

df[,cols] <- lapply(df[,cols],as.factor) 

的問題是,apply()試圖綁定的結果爲一個矩陣,這導致脅迫的列字符:

class(apply(df[,cols], 2, as.factor)) ## matrix 
class(as.factor(df[,1])) ## factor 

相反,lapply()上的元件進行操作名單。

3

您可以將結果反饋到數據幀,將識別的因素:

df[,cols]<-data.frame(apply(df[,cols], 2, function(x){ as.factor(x)}))

+0

謝謝。所以結果返回一個矩陣,他們不承認因素。 – GabyLP

+0

@GabyLP是的。 –

1

另一種選擇,與purrrdplyr,也許有點超過鹼溶液可讀,並保持在數據幀的數據:

這裏的數據:

df <- data.frame(A=1:10, B=2:11, C=3:12) 

str(df) 
'data.frame': 10 obs. of 3 variables: 
$ A: int 1 2 3 4 5 6 7 8 9 10 
$ B: int 2 3 4 5 6 7 8 9 10 11 
$ C: int 3 4 5 6 7 8 9 10 11 12 

我們CA ñ容易對所有列與dmap操作:

library(purrr) 
library(dplyr) 

# all cols to factor 
dmap(df, as.factor) 

Source: local data frame [10 x 3] 

     A  B  C 
    (fctr) (fctr) (fctr) 
1  1  2  3 
2  2  3  4 
3  3  4  5 
4  4  5  6 
5  5  6  7 
6  6  7  8 
7  7  8  9 
8  8  9  10 
9  9  10  11 
10  10  11  12 

而且同樣使用select列的子集使用dmapdplyr

# selected cols to factor 
cols <- c('A', 'B') 

df[,cols] <- 
    df %>% 
    select(one_of(cols)) %>% 
    dmap(as.factor) 

爲了得到期望的結果:

str(df) 
'data.frame': 10 obs. of 3 variables: 
$ A: Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 
$ B: Factor w/ 10 levels "2","3","4","5",..: 1 2 3 4 5 6 7 8 9 10 
$ C: int 3 4 5 6 7 8 9 10 11 12 
4

2017年11月9日更新

purrr/purrrlyr仍處於發展

類似本的,但使用purrrlyr::dmap_at

library(purrrlyr) 

df <- data.frame(A=1:10, B=2:11, C=3:12) 

# selected cols to factor 
cols <- c('A', 'B') 

(dmap_at(df, factor, .at = cols)) 

A  B  C 
<fctr> <fctr> <int> 
1  2  3  
2  3  4  
3  4  5  
4  5  6  
5  6  7  
6  7  8  
7  8  9  
8  9  10  
9  10  11  
10  11  12 
+0

不會映射(df [cols],factor)以及工作嗎?我找不到任何dmap_at()函數。 – Seanosapien

+0

你可能是對的。可以理解的是,嗚嗚聲和相關軟件包仍然經歷了很多變化。 'dmap_at'已被移至purrrlyr http://purrr.tidyverse.org/news/index。html –

+0

好抓@Seanosapien –

相關問題