不定形データをR内で整形する:Reshape an irregualr data in R.
手違いで、過去の記事を消してしまいました
キャッシュから持ってきてとりあえず復元してみる
はじめに
Hi Raja,
I deleted my blog today.
I had received your comment before, but I lost.
I searched my archive and recover my script.
Thanks.
ここから
久しぶりに、R関係で質問を受けたので、そのご返事を書くことにした。
最近は老舗のRjpWikiはもちろんのこと、TokyoR(次回は4/28だそうな…)などの地域コミュニティーが活発です。
そこには、いろいろな人がいて、いろいろな対応をされているようです。
なので、私の興味は離れてきたのも事実。
専ら、LinkedInコミュニティーにシフトしています。
そこで感じたこと
- 国家間でインフラの差があまりにも大きい
- 書籍一つ手に入れることも難しい国がある
- RはOSSでありながら、活用できない方が大勢いる
ということです。
「教えて君」という言葉がある。
これは途上国では、切実な言葉です。
調べることすらできない人、そういう方がいるという現実。
今日は途上国のある方への、ご返事です。
ただ、英語すら拙い私がどこまで回答できるのか…
This is my solution
Hi. I'm glad you to ask the question about R.
I checked your data sheet. I think that this is an irregular data to import into R.
Therefore, I recommend to reshape your data to an appropriate matrix for R.
Your data consists of value and measured data, but this isn't a matrix shape.
Surely, a top row is value and the others are measured data, but a top line is separated by comma and the others are separated by several spaces.
For example...
Your data is similar to that.
A,B,C,D,E <- separated by comma
1 2 3 <- separated by several space in all below lines
4 5
6 7 8
9 10
11 12 13
14 15
An important point is that a top line is a value and one data consists of two set of row.
Maybe, you wrote this code.
> data <- read.table("file.txt", sep=" ") 以下にエラー scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 1 行目には 11 個の要素がありません
This code isn't appropriate, because "read.table" needs the complete matrix design.
So, you might be better to import data by each line.
> dat <- readLines("file.txt") > values <- unlist(strsplit(dat[1], split=",")) > dat <- sapply(seq(2, length(dat)-1, by=2), function(i){ + x <- unlist(strsplit(dat[c(i, i+1)], split=" ")) + return(as.numeric(x[nchar(x)>0])) + }) > rownames(dat) <- values > dat <- as.data.frame(t(dat)) > dat A B C D E 1 1 2 3 4 5 2 6 7 8 9 10 3 11 12 13 14 15
I think this code is your wanted solution.
If you don't understand this code, please ask me a question anytime. :D
Thanks.