2016-04-17 5 views
0

私はテーブルをきれいにしたいと思っていましたが、まだ私は[R]に新しいので、私ができることはかなり限られています。リストは実際にはかなり長く、約10万行ですが、手動で行うことは不可能です〜助けてください。文字列値の頻度をカウントするには(同じ列のいくつかのIDから)? [R]

テーブルの形式で非常に長いデータリストがあるとします。それぞれには "Publication.Code"と "Date"があります。コードはユニークで、日付は複製できます。それぞれのために、彼らは "タイプ"列の下に "名前"のリストを持っています。列「タイプで(E60R、E62D、F06Q、E30B、T60T、H04N、G01J、H12Nある)私は、それぞれの名前の第一4つのアルファベットを使用して新しい列を変異させたかった

Publication.Code Date  Type 
1 AC00069535742 2009-04-16 E62D 21/15;E60R 7/06;E60R 21/06;E62D 25/14 
2 BB000069535652 2008-10-30 F06Q 10/ 
3 FV000069434701 2007-04-05 E30B 15/;E30B 15/16 
4 RG000069534443 2006-07-06 E62D 21/15;E62D 25/14;T60T 7/06;E60R 21/06 
5 MV000069333663 2006-02-23 H04N 1/1;G01J 3/51 
6 KK000069533634 2006-02-23 H12N 9/1;H12N 15/54;H12P 9/ 
7 NQ000069534198 2006-02-16 H12N 15/54;H12N 15/7;H12N 1/21;H12N 9/1 

「ちょうど以下のような名前のリストの中からその周波数をカウント:その後

Publication.Code Date  E60R E62D F06Q E30B T60T H04N G01J H12N 
1 AC00069535742 2009-04-16 2 2 1 0 0 0 0 0 
2 BB000069535652 2008-10-30 0 0 1 0 0 0 0 0 
3 FV000069434701 2007-04-05 0 0 0 2 0 0 0 0 
4 RG000069534443 2006-07-06 1 2 0 0 1 0 0 0 
5 MV000069333663 2006-02-23 0 0 0 0 0 1 1 0 
6 KK000069533634 2006-02-23 0 0 0 0 0 0 0 3 
7 NQ000069534198 2006-02-16 0 0 0 0 0 0 0 4 

、私は多分によって、年によってそれを総括したいと思います:

Year  E60R E62D F06Q E30B T60T H04N G01J H12N 
1 2009 2 2 1 0 0 0 0 0 
2 2008 0 0 1 0 0 0 0 0 
3 2007 0 0 0 2 0 0 0 0 
4 2006 1 2 0 0 1 1 1 7 
私は列を変異し、年によって周波数をカウントする dplyrを使用できることを理解しますが、私はちょうどから一定の値を抽出するかどうかはわかりません

Year  E60R E62D F06Q E30B T60T H04N G01J H12N 
1 2009 2 2 1 0 0 0 0 0 
2 2008 2 2 2 0 0 0 0 0 
3 2007 2 2 2 2 0 0 0 0 
4 2006 2 4 2 2 1 1 1 7 

:また

&各列の累積和コラム、本当にあなたがベクトルmyTypesにあなたのタイプを置く場合〜

+0

colwiseで各列の使用cumsumの累積値を計算するために第二部

res$Date <-lubridate::ymd(res$Date) ddply(res, .(year(Date)), function(x)colSums(x[,-(1:2)])) 

を解決しますあなたは(その場合、あなたはgrep' '使用することができます)タイプのリストを持っていますかあなたはデータからそれらを取り除かなければなりませんか? –

+0

@RichardTelfordはい私は~~~ –

+0

あなたのdata.frameで 'dput'を使うと、それは簡単に解決策をテストすることができます –

答えて

0

が、これはあなたの問題の最初の部分のために働く必要があります任意の助けのために感謝

require(plyr) 
require(stringr) 
df<-read.table(header = TRUE, sep=",", text=" 
Publication.Code, Date,  Type 
AC00069535742, 2009-04-16, E62D 21/15;E60R 7/06;E60R 21/06;E62D 25/14 
BB000069535652, 2008-10-30, F06Q 10/") 
myTypes <- c("E60R", "E62D", "F06Q", "E30B", "T60T", "H04N", "G01J", "H12N") 
res <- adply(df, .margin = 1, .fun = function(x) setNames(str_count(x$Type, pattern = myTypes), myTypes)) 
res$Type <- NULL 

これは

names(res2)[1] <-"year" 
cbind(year = res2$year, colwise(cumsum, myTypes)(res2)) 
+0

ありがとうたくさん〜あなたの答えはとても役に立ちます。もう一つのこと、もし私が価値の塊を見つけたら、コードをどうやって操作するのですか? –

+0

何のクマですか? 2番目のテーブルの列は? –

+0

はい、2番目のテーブルからの列の累積合計〜ありがとうございます。 –

関連する問題