2016-09-19 34 views
-1

dim:47,685 x 10,541という非常に大きなファイルがあります。このファイルには、以下のように、第2列の各行の文字間にスペースはありません。文字列の文字列を分割して文字数をカウントする

ファイル#1

Row1 01205201207502102102….. 

Row2 20101020100210201022….. 

Row3 21050210210001120120….. 

私は、そのファイルの統計のいくつかをしたいとかもしれいくつかの列または行を削除します。削除し、私が編集を終了した後、

[ファイル#2

Row1 0 1 2 0 5 2 0 1 2 0 7 5 0 2 1 0 2 1 0 2….. 

Row2 2 0 1 0 1 0 2 0 1 0 0 2 1 0 2 0 1 0 2 2….. 

Row3 2 1 0 0 0 2 1 0 2 1 0 0 0 1 1 2 0 1 2 0….. 

そして:だから、Rを使用して、私はこのような何かを得るために、2列目の各2つの文字の間にスペースを追加します2番目の列の文字間のスペースは、最後の形式はFile # 1のようになります。

これを行うにはどのような方法が最適ですか?

+1

スペースを追加すると、関連していないように、「私は、そのファイルの統計のいくつかをしたいと削除することができますいくつかの列または行。私たちに[XY問題](http://meta.stackexchange.com/a/66378/203914)がありますか? – Roland

+0

各列に1文字が含まれていることがわかっている場合は、要求が示すとおり、それらを区切る必要はありません。それぞれの文字列を表すようにインデックスを付けることができます。 –

+0

どうすればいいか教えてください。私の目標は、各行/列にどれくらいの5および/または7を表示してから、各列または行を削除または保持するかを決定することです。 –

答えて

0

も同様にカウントされます。 (ご意見から)

ここにはtidyrstringrを使用した解決策があります。しかし、これはあなたの文字列がcolumn2の長さが等しいとみなします。このソリューションは、行方向と列方向の両方のカウントを提供します。これは非常に基本的な段階的なやり方で行われ、コードの数行で同様に達成することができます。

library(stringr) 
library(tidyr) 

data<-data.frame(Column.1 = c("01205", "20705", "27057"), 
        stringsAsFactors = FALSE) 

count<-str_count(data$Column.1) # Get the length of the string in column 2 
index<-1:count[1] # Generate an index based on the length 

# Count the number of 5 and 7 in each string by row and add it as new column 
data$Row.count_5 <- str_count(data$Column.1, "5") 
data$Row.count_7 <- str_count(data$Column.1, "7") 

new.data <- separate(data, Column.1, into = paste("V", 1:count[1], sep = ""), sep = index) 
new.data$'NA' <- NULL 
new.data 

Column_count_5 <- apply(new.data[1:5],2,FUN=function(x) sum(x == 5)) 
Column_count_7 <- apply(new.data[1:5],2,FUN=function(x) sum(x == 7)) 
column_count <- as.data.frame(t(data.frame(Column_count_5,Column_count_7))) 

library(plyr) 
Final.df<- rbind.fill(new.data,column_count) 
rownames(Final.df)<-c("Row1","Row2","Row3", "Column.count_5","Column.count_7") 
Final.df 

出力

   V1 V2 V3 V4 V5 Row.count_5 Row.count_7 
Row1   0 1 2 0 5   1   0 
Row2   2 0 7 0 5   1   1 
Row3   2 7 0 5 7   1   2 
Column.count_5 0 0 0 1 2   NA   NA 
Column.count_7 0 1 1 0 1   NA   NA 

サンプル・データ

data<-data.frame(Column.1 = c("01205", "20705", "27057"), 
        stringsAsFactors = FALSE) 
関連する問題