どう書く?org : タブ区切りデータの処理

original page : http://ja.doukaku.org/209/

タブ区切りのデータを読み込んで操作をし書き出す方法を教えてください。 読み込み・書き出しの方法は任意とします。

与えられるデータは:

* レコードの区切りは改行、カラムの区切りはタブです。

* 最初のレコードはヘッダで、カラムの名前が書いてあります。

* それ以降はデータで、第1,4カラムは整数値、第2,3カラムは文字列値です。

この入力データに対して以下の操作をしたものを書き出してください:

* 第1カラムの値でデータを昇順にソートする。

* 第2カラムと第3カラムをヘッダを含めて入れ替える。

* 第4カラムの値にそれぞれ1を加える。

入力の例:

ID Surname Forename Age
1 Sato Hanako 17
0 Suzuki Taro 18
...

出力の例:

ID Forename Surname Age
0 Taro Suzuki 19
1 Hanako Sato 18
...

#7729

original page : http://ja.doukaku.org/comment/7729/

統計処理言語だけあって、Rでは、この手のデータ処理は非常に直感的です。

# タブ区切りのデータを読み込む
d <- read.delim("input.tsv")

# 第1カラムの値でデータを昇順にソートする。
d <- d[sort.list(d[,1]),]

# 第2カラムと第3カラムをヘッダを含めて入れ替える。
d[,c(2,3)] <- d[,c(3,2)]
colnames(d)[c(2,3)] <- colnames(d)[c(3,2)]

# 第4カラムの値にそれぞれ1を加える。
d[,4] <- d[,4] + 1

# 書き出す
write.table(d, "output.tsv", sep="\t", quote=F, row.names=F)