2

NaN'sの代わりに'sが誤って入力された〜60列の適切なサイズのデータ​​セットがありますNA。列タイプは、文字、数値、因数、整数の組み合わせです。線形回帰を含むいくつかの関数の作業を台無しにしているので、 NaN'sを'sに変換する必要があります。NA私はここでこの質問から個々の列を変更する方法を知っています:

RはNaNをNAに変換できません

しかし、ベクトル型を失うことなく完全なデータフレームに対してこれを行う方法があるかどうか興味があります。何か提案がありますか、それともこれは手動の仕事ですか?

4

3 に答える 3

1

だろう

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
     fixed = FALSE, useBytes = FALSE)

仕事?

多分あなたはとのミックスが必要になるでしょうapply。私がそれを実装しようと試みることができるように、小さな例を提供してもらえますか?

ありがとう。

于 2012-03-07T22:31:07.703 に答える
1

これは機能しますか?(数値、整数、文字、および因子ベクトル用である必要があります。)

as.data.frame( lapply(dat, function(col) {
                 if (is.numeric(col)) { is.na(col) <- is.nan(col); return(col)} else {
                 if (is.character(col) || is.factor(col) )  {
                                              is.na(col) <- col == "NaN"; return(col)} else {
                 return(col)                                                                }
                                                                                     }
                                          }
               )

dat <- 
structure(list(tester1 = structure(c(1L, 1L, 2L, 3L, 1L, 2L, 
4L), .Label = c("2", "3", "4", "NaN"), class = "factor"), tester2 = c(2, 
2, 3, 4, 2, 3, NaN)), .Names = c("tester1", "tester2"), row.names = c(NA, 
-7L), class = "data.frame")

# Produced:

  tester1 tester2
1       2       2
2       2       2
3       3       3
4       4       4
5       2       2
6       3       3
7    <NA>      NA
于 2012-03-08T00:04:03.953 に答える
-1

上記のサンプルデータセットを使用します。これを試して:

CMBv = colnames(dat)

dat[CMBv] = lapply(dat[CMBv], function(x){ifelse(is.nan(x), NA,x)} )
于 2015-03-06T00:59:01.017 に答える