3

Rで、コメント付きのファイルをcsvとして読み込んでいます

read.data.raw = read.csv(inputfile, sep='\t', header=F, comment.char='')

ファイルは次のようになります。

#comment line 1
data 1<tab>x<tab>y
#comment line 2
data 2<tab>x<tab>y
data 3<tab>x<tab>y

今、私はコメントされていない行を抽出します

comment_ind = grep( '^#.*', read.data.raw[[1]])
read.data = read.data.raw[-comment_ind,]

それは私を残します:

 data 1<tab>x<tab>y
 data 2<tab>x<tab>y
 data 3<tab>x<tab>y

行/列の数を維持する別のスクリプトを使用してこのデータを変更しており、それを元の読み取りデータ (ユーザー コメント付き) に戻し、このようにユーザーに返したいと考えています。

#comment line 1
modified data 1<tab>x<tab>y
#comment line 2
modified data 2<tab>x<tab>y
modified data 3<tab>x<tab>y

read.data で抽出したデータは行名 row.names(read.data) を保持するので、試してみました

original.read.data[as.numeric(row.names(read.data)),] = read.data

しかし、それはうまくいかず、たくさんの NA/s を得ました

何か案は?

4

1 に答える 1

1

これはあなたが望むことをしますか?

read.data.raw <- structure(list(V1 = structure(c(1L, 3L, 2L, 4L, 5L),
   .Label = c("#comment line 1", "#comment line 2", "data 1", "data 2", 
   "data 3"), class = "factor"), V2 = structure(c(1L, 2L, 1L, 2L, 2L), 
   .Label = c("", "x"), class = "factor"), V3 = structure(c(1L, 2L, 1L,
   2L, 2L), .Label = c("", "y"), class = "factor")), .Names = c("V1", 
   "V2", "V3"), class = "data.frame", row.names = c(NA, -5L))

comment_ind = grep( '^#.*', read.data.raw[[1]])
read.data <- read.data.raw[-comment_ind,]
# modify V1
read.data$V1 <- gsub("data", "DATA", read.data$V1)
# rbind() and then order() comments into original places
new.data <- rbind(read.data.raw[comment_ind,], read.data)
new.data <- new.data[order(as.numeric(rownames(new.data))),]
于 2012-08-27T21:41:06.260 に答える