我想清理我的桌子,但由于我还是[R]的新手,我能做的事情非常有限。该列表实际上很长,大约100,000行,我不可能手动执行〜请帮助我。
假设我有一个很长的表格数据列表。他们每个人都有一个" Publication.Code"和"日期"。该代码是唯一的,而日期可以重复。对于每一个,他们都有一个"名称列表"列#34;键入"。
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
我想使用每个名称的前4个字母来改变新列( E60R,E62D,F06Q,E30B,T60T,H04N,G01J,H12N )在列"类型"并将其频率计入名称列表中,如下所示:
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
&安培;也是每列的累积总和:
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
据我所知,我可以使用 dplyr 来改变列并按年份计算频率,但我不确定如何从列中提取某些值,真的很感激任何帮助〜
答案 0 :(得分:0)
如果你将你的类型放入矢量myTypes,这应该适用于问题的第一部分
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
这将解决第二部分
res$Date <-lubridate::ymd(res$Date)
ddply(res, .(year(Date)), function(x)colSums(x[,-(1:2)]))
要计算每列的累计值,请使用cumsum
colwise
names(res2)[1] <-"year"
cbind(year = res2$year, colwise(cumsum, myTypes)(res2))