1

というタイトルgenのデータフレームがあります。これは、A、C、G、T、および 0 で構成されるデータ フレームです。A を 1 に、C を 2 に、G を 3 に、T を 4 に置き換えたいと思います。コードを使用しようとするとgen1[gen1 == "A"] = 1、次のエラー メッセージが表示されます。

Warning messages:
1: In `[<-.factor`(`*tmp*`, thisvar, value = "1") :
  invalid factor level, NAs generated

結果のデータ フレームでは、すべての A が置き換えられていますが、1 の代わりに NA があります。

これを正しく行う方法を知っている人はいますか?

ありがとう

4

2 に答える 2

1

解決:

次を使用して、列係数を整数に強制することができますas.integer

使用sapply:

sapply(gen1,as.integer)

colwiseからplyr

library(plyr)
colwise(as.integer)(gen1)

たとえば、最初に A、B、C、および D の data.frame を生成します。

 set.seed(1)
gen1 <- as.data.frame(matrix(sample(LETTERS[1:4], 4 * 5, rep = TRUE), ncol = 4))
##   V1 V2 V3 V4
## 1  B  D  A  B
## 2  B  D  A  C
## 3  C  C  C  D
## 4  D  C  B  B
## 5  A  A  D  D
library(plyr)
colwise(as.integer)(gen1)
##   V1 V2 V3 V4
## 1  2  3  1  1
## 2  2  3  1  2
## 3  3  2  3  3
## 4  4  2  2  1
## 5  1  1  4  3
sapply(gen1, as.integer)
##      V1 V2 V3 V4
## [1,]  2  3  1  1
## [2,]  2  3  1  2
## [3,]  3  2  3  3
## [4,]  4  2  2  1
## [5,]  1  1  4  3

警告が表示されるのはなぜですか?

警告メッセージは明示的ですinvalid factor level, NAs generated

レベル セットに属さない値で因子値を変更しようとすると、エラーが発生するため、NA に置き換えられます。エラーを再現します:

h <- data.frame(xx = factor(c("A","B")) )
h[h == "A"] <- "C"   ## C don't belong to levels of xx 
Warning message:
In `[<-.factor`(`*tmp*`, thisvar, value = "C") :
  invalid factor level, NA generated
于 2013-07-21T22:58:12.053 に答える
0

stringAsFactors = Falseこれを行うには、データ フレームの作成中に引数を設定します。デフォルトでは true です。

コード例:

d <- data.frame(a=c('A','C','G','T','0'),b=c('C','A','G','A','0'), stringsAsFactors = FALSE)
> d
  a b
1 A C
2 C A
3 G G
4 T A
5 0 0
> d[d=='A']<- '1'
> d
  a b
1 1 C
2 C 1
3 G G
4 T 1
5 0 0
于 2015-10-12T14:44:43.743 に答える