dat <- read.table("in.csv",header=T, sep=",") nr <- nrow(dat) nc <- ncol(dat) # セルの数字を文字列に置き換える for(i in 1:nr) { for(j in 1:nc) { r <- dat[i,j] if (r >= 1) { v <- rep(colnames(dat)[j], r) v <- paste(v , collapse=" ") dat[i,j] <- v } if (r == 0) { dat[i,j] <- "" } } } gsub(" ", "", dat) write.table(dat, "out.txt", col.names = F, row.names = F, quote = F, sep = " " )
No.22016 Re: R 文字列の生成 【青木繁伸】 2016/05/27(Fri) 23:12
テストデータを「生成する」プログラムも付けてくれるといいのだけど。# テストデータ生成20倍くらいは速い。ただし,行末に1つ空白が付く。これを回避するには若干の追加処理が必要。
dat = matrix(0, 300, 52)
colnames(dat) = c(LETTERS, letters)
set.seed(123)
idx = cbind(sample(300, 300*26, replace=TRUE),
sample(52, 300*26, replace=TRUE))
dat[idx] = sample(6, 300*26, replace=TRUE)
dat = data.frame(dat)
# 処理プログラム
names = colnames(dat)
fn = "out.txt"
if (file.exists(fn)) invisible(file.remove(fn))
invisible(apply(dat, 1, function(x) cat(rep(names, x), "\n", file=fn, append=TRUE)))
No.22017 【御礼】 Re: R 文字列の生成 【明石】 2016/05/28(Sat) 06:52
青木先生,
お忙しいところを失礼いたします,明石と申します。
ご丁寧なご教示をいただき,誠にありがとうございました。
また,助けていただきました。
投稿に際して,テストデータの件,不手際がございましたこと,お詫びいたします。
今後,投稿させていただく際には,お手を煩わせることが少なくなるように注意をいたします。
ご教示くださいました技は,あまりにも研ぎ澄まされていて,にわかには理解できませんので,
この土日,楽しみながら,じっくりと勉強させていただきます。
また,先生がお書きになられたように,確かに,体感的には数十倍の速度があります。
大変に良いお手本を示してくださり,心から御礼を申し上げます。
ありがとうございました。
● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る