2

いくつかの空のセルを含むファイルを読み込もうとしていますが、空のセルの期待値を取得していますNA''またはの値しか持てない特別な列がいくつかあります'+'。したがって、これらの列を因子クラスに設定したいと思います

read_tsv('file.txt', 
         col_types=list(
             column_with_empty_cells=col_factor(c('','+'))))

しかし、列にはまだNAsこれらの列があります。パラメーターreadr_tsvを変更することで関数のグローバルな動作を変更できますが、これは私が望むものではありません。naこれを特定の列でのみ変更したい。

NAsこれらを直接に変換する方法はあり''ますか? 後でこれを行うことはできますが、間違った方法で使用しているのではないかと思います.

編集 ここにテストファイルがあります

実際にファイルをアップロードするにはどうすればよいですか? 画像しか貼れなかった…

4

3 に答える 3

1

lapplyと を使用して、この問題を解決する新しい関数を作成できますfactor

library(readr)

read_tsv2 <- function(file, na.char=" "){
  test <- read_tsv(file = file, col_types=list(column_with_empty_cells=col_character()))
  test <- as.data.frame(test)
  names_tsv <- names(test)
  test <- lapply(test,
         function(x){
    if(sum(is.na(x))!=length(x)){
      x[is.na(x)] <- na.char 
    factor(x,levels = unique(x))
    }else{
      x
    }
  }
  )
  test <- do.call(cbind.data.frame, test)
  names(test) <- names_tsv
  test
}

file <- read_tsv2(file = "~/Downloads/file.txt", na.char = " ")

file

   test column_with_empty_cells
1  <NA>                        
2  <NA>                        
3  <NA>                        
4  <NA>                        
5  <NA>                        
6  <NA>                        
7  <NA>                        
8  <NA>                        
9  <NA>                        
10 <NA>                        
11 <NA>                        
12 <NA>                        
13 <NA>                        
14 <NA>                        
15 <NA>                        
16 <NA>                        
17 <NA>                        
18 <NA>                        
19 <NA>                        
20 <NA>                        
21 <NA>                        
22 <NA>                        
23 <NA>                        
24 <NA>                       +
25 <NA>                       +
26 <NA>                        
27 <NA>                        
28 <NA>                       +
于 2016-11-24T22:18:45.797 に答える
0

read_tsvは のカスタム実装でread_delimあり、 も同様ですread_csv。はtsv、タブ区切りファイル (この場合はテスト ファイルでもあります) を読み取るように特別に設計されています。read_csv特定のタブ区切りの実装を使用することに縛られていない場合は、使用することで簡単に問題を解決できます。

read_csv列に一意の文字セットがほとんど見つからない場合、デフォルトでクラスが要素として使用されます。

を係数として取得するには

read.csv("test.txt", sep = "\t")  

を文字として取得するには

read.csv("test.txt", sep = "\t", stringsAsFactors = FALSE)

サンプルデータフレーム読み取り

編集1

" "特定の列をとして扱いたい場合はNA、読み取り時にそれらの列リストにのみ lappy を使用してクラスを渡すことができますが、質問に基づいて、 NA として扱いたいようNULLで、他の文字はそうすべきです強要されません。

于 2016-11-27T03:48:24.310 に答える