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

allcites1970 年から 2006 年までの特許について、出願年 ( ) ごとの平均被引用数 ( 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 に答える