我提供了一个尝试的解决方案,如果有人可以检查我的理智,那就太好了!
我有一个dtm
,看起来像以下内容:
110471_10-K_2006 . 1 . 1 . . . . . . . . . . . 1 1 . . 1
907687_10-K_2005 . . . . . . . . . . 1 . . . . . . . . .
907687_10-K_2006 . . . . . . . . . 1 . . . . . . . . . .
1018979_10-K_2006 . . . . 1 . 1 . . . . 1 . 1 1 . . 1 . .
936395_10-K_2006 1 . 1 . . 1 . . . . . . 1 . . . . . 1 .
930236_10-K_2005 . . . . . . . . . . . . . . . . . . . .
930236_10-K/A_2005 . . . . . . . . . . . . . . . . . . . .
930236_10-K/A_2005.1 . . . . . . . . . . . . . . . . . . . .
930236_10-K_2006 . . . . . . . . . . . . . . . . . . . .
706015_10-K_2005 . . . . . . . . . . . . . . . . . . . .
706015_10-K_2006 . . . . . . . . . . . . . . . . . . . .
1172052_10-K_2005 . . . . . . . . . . . . . . . . . . . .
1172052_10-K_2006 . . . . . . . . . . . . . . . . . . . .
928373_10-K_2006 . . . . . . . . . . . . . . . . . . . .
928373_10-K/A_2006 . . . . . . . . . . . . . . . . . . . .
1047537_10-K_2005 . . . . . . . . . . . . . . . . . . . .
1047537_10-K_2006 . . . . . . . . 1 . . . . . . . . . . .
1012271_10-K_2005 . . . . . . . . . . . . . . . . . . . .
1012271_10-K_2006 . . . . . . . 1 . . . . . . . . . . . .
我可以使用cosine
计算dtm之间的dist2(dtm, dtm, method = "cosine", norm = 'none')
距离,但是这在计算上是昂贵的,并且我不需要所有结果-只是某些结果。我还有以下称为ids_to_match
的
cikYear_t_minus_1 cikYear_t
1 110471_10-K_2006 110471_10-K_2007
2 907687_10-K_2005 907687_10-K_2006
3 907687_10-K_2006 907687_10-K_2007
4 1018979_10-K_2006 1018979_10-K_2007
5 936395_10-K_2006 936395_10-K_2007
6 930236_10-K_2005 930236_10-K_2006
7 930236_10-K/A_2005 930236_10-K/A_2006
8 930236_10-K/A_2005.1 930236_10-K/A_2006.1
9 930236_10-K_2006 930236_10-K_2007
10 706015_10-K_2005 706015_10-K_2006
11 706015_10-K_2006 706015_10-K_2007
12 1172052_10-K_2005 1172052_10-K_2006
13 1172052_10-K_2006 1172052_10-K_2007
14 928373_10-K_2006 928373_10-K_2007
15 928373_10-K/A_2006 928373_10-K/A_2007
16 1047537_10-K_2005 1047537_10-K_2006
17 1047537_10-K_2006 1047537_10-K_2007
18 1012271_10-K_2005 1012271_10-K_2006
19 1012271_10-K_2006 1012271_10-K_2007
我想计算ids_to_match
中dtm
中成对存在的两列之间的余弦距离。在ids_to_match
的第一行中,有以下行:110471_10-K_2006 110471_10-K_2007
,其中110471_10-K_2006
存在于row 1
的{{1}}中,但是dtm
不存在110471_10-K_2007
,因此不会计算余弦距离。
在dtm
数据集中的row 2
中,有一行:ids_to_match
,可以在907687_10-K_2005 907687_10-K_2006
的{{1}}和row 2
中找到。因此,我想计算这两行之间的余弦距离。 row 3
。
取dtm
-dist2(dtm["row2"], dtm["row3"], method = "cosine", norm = 'none')
中的row 12
,应与ids_to_match
矩阵的1172052_10-K_2005 1172052_10-K_2006
和row 12
匹配
感谢您的帮助!
数据:
row 13
匹配ID:
dtm
我想我找到了一个解决方案,但是它看起来很乱,所以有时我很可能会出错。
我首先要在 dtm <- new("dgCMatrix", i = c(4L, 0L, 4L, 0L, 3L, 4L, 3L, 18L, 16L,
2L, 1L, 3L, 4L, 3L, 3L, 0L, 0L, 3L, 4L, 0L), p = 0:20, Dim = 19:20,
Dimnames = list(c("110471_10-K_2006", "907687_10-K_2005",
"907687_10-K_2006", "1018979_10-K_2006", "936395_10-K_2006",
"930236_10-K_2005", "930236_10-K/A_2005", "930236_10-K/A_2005.1",
"930236_10-K_2006", "706015_10-K_2005", "706015_10-K_2006",
"1172052_10-K_2005", "1172052_10-K_2006", "928373_10-K_2006",
"928373_10-K/A_2006", "1047537_10-K_2005", "1047537_10-K_2006",
"1012271_10-K_2005", "1012271_10-K_2006"), c("spares", "warrior",
"akara", "dissipating", "mechanized", "modular", "syndicate",
"wind", "trades", "neural", "gao", "interfaced", "confronted",
"harrington", "forwarded", "restaurant", "switzerland", "incomplete",
"writes", "hushpuppies")), x = c(1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), factors = list())
中找到行“ ids”,在ids_to_match <- structure(list(cikYear_t_minus_1 = c("110471_10-K_2006", "907687_10-K_2005",
"907687_10-K_2006", "1018979_10-K_2006", "936395_10-K_2006",
"930236_10-K_2005", "930236_10-K/A_2005", "930236_10-K/A_2005.1",
"930236_10-K_2006", "706015_10-K_2005", "706015_10-K_2006", "1172052_10-K_2005",
"1172052_10-K_2006", "928373_10-K_2006", "928373_10-K/A_2006",
"1047537_10-K_2005", "1047537_10-K_2006", "1012271_10-K_2005",
"1012271_10-K_2006"), cikYear_t = c("110471_10-K_2007", "907687_10-K_2006",
"907687_10-K_2007", "1018979_10-K_2007", "936395_10-K_2007",
"930236_10-K_2006", "930236_10-K/A_2006", "930236_10-K/A_2006.1",
"930236_10-K_2007", "706015_10-K_2006", "706015_10-K_2007", "1172052_10-K_2006",
"1172052_10-K_2007", "928373_10-K_2007", "928373_10-K/A_2007",
"1047537_10-K_2006", "1047537_10-K_2007", "1012271_10-K_2006",
"1012271_10-K_2007")), class = "data.frame", row.names = c(NA,
-19L))
和dtm
中有匹配的观察值,所以我写了两行ids_to_get
和{ {1}}给出以下输出。
rownames(dtm)
现在我将match_1
,match_2
作为匹配项,并将> match_1
cikYear_t_minus_1
2 907687_10-K_2005
6 930236_10-K_2005
10 706015_10-K_2005
12 1172052_10-K_2005
16 1047537_10-K_2005
18 1012271_10-K_2005
> match_2
cikYear_t_minus_1
3 907687_10-K_2006
9 930236_10-K_2006
11 706015_10-K_2006
13 1172052_10-K_2006
17 1047537_10-K_2006
19 1012271_10-K_2006
和2
作为另一个匹配项,等等。我创建了一个Matix,如下所示:
3
现在我可以计算出6
矩阵,其输出为:
9
尝试的解决方案:
> matching
[,1] [,2]
[1,] 2 3
[2,] 6 9
[3,] 10 11
[4,] 12 13
[5,] 16 17
[6,] 18 19