2017-04-21 15 views
0

内因子変数を置き換えることはできません。は、私がデータフレーム構造の次のリストを持っているリストR

str(mylist) 

List of 2 
$ L1 :'data.frame': 12471 obs. of 3 variables: 
...$ colA : Date[1:12471], format: "2006-10-10" "2010-06-21" ... 
...$ colB : int [1:12471], 62 42 55 12 78 ... 
...$ colC : Factor w/ 3 levels "type1","type2","type3",..: 1 2 3 2 2 ... 

私は新しい要因type4type1type2を交換したいと思います。

私が試してみました:

mylist <- lapply(mylist, transform, colC = 
         replace(colC, colC == 'type1','type4')) 
Warning message: 
1: In `[<-.factor`(`*tmp*`, list, value = "type4") : 
    invalid factor level, NA generated 
2: In `[<-.factor`(`*tmp*`, list, value = "type4") : 
    invalid factor level, NA generated 

私はstringAsFactor=Fと私の最初のデータで読みたくないが、私は私の最初のデータセットのレベルとしてtype4を追加しようとしている使用して(データフレームのリストに分割前) :

levels(mydf$colC) <- c(levels(mydf$colC), "type4") 

でも、置き換えようとしても同じエラーが発生します。

type4は要因として扱われると私はどのように置き換えて言うのですか?

答えて

0

levelsオプションを使用して要因を更新できます。 など、 status <- factor(status, order=TRUE, levels=c("1", "3", "2",...)) c("1", "3", "2",...)ここではtype4です。

0

あなたが述べているように、重要なことは新しい因子レベルを加えることです。

## Test data: 
mydf <- data.frame(colC = factor(c("type1", "type2", "type3", "type2", "type2"))) 
mylist <- list(mydf, mydf) 

あなたのデータは、3つの因子レベルがあります。

> str(mylist) 
List of 2 
$ :'data.frame': 5 obs. of 1 variable: 
    ..$ colC: Factor w/ 3 levels "type1","type2",..: 1 2 3 2 2 
$ :'data.frame': 5 obs. of 1 variable: 
    ..$ colC: Factor w/ 3 levels "type1","type2",..: 1 2 3 2 2 

今、あなたのreplaceコマンドが動作するはずです、第四因子レベルを追加します。

## Change levels: 
for (ii in seq(along = mylist)) levels(mylist[[ii]]$colC) <- 
    c(levels(mylist[[ii]]$colC), "type4") 

## Replace level: 
mylist <- lapply(mylist, transform, colC = replace(colC, 
    colC == 'type1','type4')) 

新しいデータを4つの因子レベルがあります。

> str(mylist) 
List of 2 
$ :'data.frame': 5 obs. of 1 variable: 
    ..$ colC: Factor w/ 4 levels "type1","type2",..: 4 2 3 2 2 
$ :'data.frame': 5 obs. of 1 variable: 
    ..$ colC: Factor w/ 4 levels "type1","type2",..: 4 2 3 2 2 
関連する問題