0

我正在处理大量专利数据。每行是一个单独的专利,列包含包括专利申请年份和引用次数在内的信息。

> head(p)
  allcites appyear asscode assgnum cat cat_ocl  cclass country ddate gday gmonth
1        6    1974       2       1   6       6 2/161.4      US          6      1
2        0    1974       2       1   6       6    5/11      US          6      1
3       20    1975       2       1   6       6   5/430      US          6      1
4        4    1974       1      NA   5    <NA> 114/354                  6      1
5        1    1975       1      NA   6       6 12/142S                  6      1
6        3    1972       2       1   6       6 15/53.4      US          6      1
  gyear hjtwt       icl icl_class icl_maingroup iclnum nclaims nclass nclass_ocl
1  1976     1 A41D 1900      A41D            19      1       4      2          2
2  1976     1 A47D  701      A47D             7      1       3      5          5
3  1976     1 A47D  702      A47D             7      1      24      5          5
4  1976     1 B63B  708      B63B             7      1       7    114          9
5  1976     1 A43D  900      A43D             9      1       9     12         12
6  1976     1 B60S  304      B60S             3      1      12     15         15
   patent   pdpass state status subcat subcat_ocl subclass subclass1 subclass1_ocl
1 3930271 10030271    IL            63         63    161.4     161.4           161
2 3930272 10156902    PA            65         65     11.0        11            11
3 3930273 10112031    MO            65         65    430.0       430           331
4 3930274       NA    CA            55         NA    354.0       354             2
5 3930275       NA    NJ            63         63       NA      142S           142
6 3930276 10030276    IL            69         69     53.4      53.4            53
  subclass_ocl term_extension uspto_assignee      gdate
1          161              0         251415 1976-01-06
2           11              0         246000 1976-01-06
3          331              0          10490 1976-01-06
4            2              0              0 1976-01-06
5          142              0              0 1976-01-06
6           53              0         243840 1976-01-06

我正在尝试创建一个新的数据框,其中包含1970 年至 2006 年专利的allcites每个申请年 ( appyear) 的平均引用次数 ( ),按类别 ( cat) 分隔(数据一直追溯到 1901 年)。我成功地做到了这一点,但我觉得我的解决方案有点临时,没有利用 R 的特定功能。这是我的解决方案

#citations by category
citescat <- data.frame("chem"=integer(37),
                       "comp"=integer(37),
                       "drugs"=integer(37),
                       "ee"=integer(37),
                       "mech"=integer(37),
                       "other"=integer(37),
                       "year"=1970:2006
                       )
for (i in 1:37) {
  for (j in 1:6) {
    citescat[i,j] <- mean(p$allcites[p$appyear==(i+1969) & p$cat==j], na.rm=TRUE)
  }
}

我想知道是否有一种简单的方法可以做到这一点,而无需使用嵌套的 for 循环,这样可以很容易地对其进行小调整。除了这个之外,我很难准确地确定我在寻找什么,但是我的代码对我来说看起来很丑,我怀疑在 R 中有更好的方法来做到这一点。

4

1 回答 1

0

Joran 是对的 - 这是一个plyr解决方案。如果没有可用形式的数据集,很难准确地向您展示,但这里是一个简化的数据集:

p <- data.frame(allcites = sample(1:20, 20), appyear = 1974:1975, pcat = rep(1:4, each = 5))

#First calculate the means of each group
cites <- ddply(p, .(appyear, pcat), summarise, meancites = mean(allcites, na.rm = T))

#This gives us the data in long form
#   appyear pcat meancites
# 1    1974    1 14.666667
# 2    1974    2  9.500000
# 3    1974    3 10.000000
# 4    1974    4 10.500000
# 5    1975    1 16.000000
# 6    1975    2  4.000000
# 7    1975    3 12.000000
# 8    1975    4  9.333333

#Now use dcast to get it in wide form (which I think your for loop was doing):
citescat <- dcast(cites, appyear ~ pcat)
#   appyear        1   2  3         4
# 1    1974 14.66667 9.5 10 10.500000
# 2    1975 16.00000 4.0 12  9.333333

希望您能看到如何使其适应您的特定数据。

于 2013-08-18T05:35:20.587 回答