5

ここにdata.txtがあります:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
root         1  0.0  0.0   2280   728 ?        Ss   20:44   0:00 init [2]    
root         2  0.0  0.0      0     0 ?        S    20:44   0:00 [kthreadd]  
root       202  0.0  0.0      0     0 ?        S<   20:44   0:00 [ext4-dio-unwri  
root       334  0.0  0.1   2916  1452 ?        Ss   20:44   0:00 udevd --daemon  

データをdata.frameに読み込む方法は?
1.セパレーターを決定できない
最後のフィールドは問題です。セパレーターspaceにすることはできません
。init [2] 、udevd --daemon は 1 つのフィールドであり、 で区切ることはできませんspace
2.すべての行の幅が異なる固定幅はありません

では、data.txt を data.frame に読み込むにはどうすればよいですか?

4

3 に答える 3

4

私はこのようにします:

library(stringr) # has a convenient function for splitting to a fixed length 

raw          <- system("ps aux", intern = TRUE)
fields       <- strsplit(raw[1], " +")[[1]]
ps           <- str_split_fixed(raw[-1], " +", n = length(fields))
colnames(ps) <- fields
于 2013-01-21T12:47:42.047 に答える
2

トリックを行う必要があるワンライナーを次に示します。

do.call(rbind, lapply(strsplit(readLines("data.txt"), "\\s+"), function(fields) c(fields[1:10], paste(fields[-(1:10)], collapse = " "))))

詳細は次のとおりです。

  1. 経由でファイルのすべての行を読み取りますreadLines(結果は、各ベクトル要素がファイルの 1 行である文字ベクトルになります)

  2. strsplit各行を空白で区切られた文字列に分割するために使用します ( \\s+)

  3. 行ごとに ( lapply)、10 番目のフィールドの後にあるすべてのフィールドを ( 経由でpaste(..., collapse = " ")) 1 つにマージします。これにより、各リスト要素がファイルの 1 行を表し、長さ 11 の文字ベクトルであるリストが作成されます (フィールドごとに 1 つ)。 )

  4. 最後にrbind、リストをマトリックス (またはデータ フレーム) にマージするために呼び出します

于 2013-04-07T10:15:33.207 に答える
0

データの形式は何ですか? Excel で開くことができる場合は、タブ区切りのファイルとして保存するのが最善の方法です。

ファイルをタブ区切りファイルとして保存することは、 にインポートするデータを準備する一般的な方法の 1 つですR。これは、Excel で「名前を付けて保存」「.txt (タブ区切り)」することで実行できます。これが完了したら:

my_data <- read.table("path/to/file/", header = TRUE, sep = "\t")

sep = "\t"ファイルがタブ区切りであることをRに伝えます

于 2013-01-21T03:29:06.530 に答える