我有一个数据框,我执行了聚类,并将结果放在一列中,如:
> head(kdata)
ID cluster code longt latit
1 410001 2 1003035 -87.7316 41.73827
2 410002 3 1001655 -87.6274 41.80555
3 410007 3 1002658 -87.6321 41.68163
4 410030 3 1001218 -87.7181 41.89198
5 410033 3 1002393 -87.9277 43.02118
6 410037 3 1001039 -87.9560 43.12313
我有另一个看起来像这样的数据框:
> head(gdata)
code Month Year MonthKpi.3.1 MonthKpi.4 MonthKpi.7 MonthKpi.8 MonthKpi.9
7959973 1001218 1 2010 -4721.50943 -0.743661905 0.06113550 0.15366151 0.2892823
5256388 1001039 1 2010 -1180.66667 -0.081875509 0.06277033 0.09753102 0.3749104
19304425 1001978 1 2010 -67.46296 -0.006731238 0.01908687 0.06382502 0.6990651
592175 1000107 1 2010 458.61538 0.019967915 0.11607883 0.13124782 0.3024831
32464177 1002863 1 2010 -4037.80000 -0.492330578 0.02269961 0.10713102 0.3161038
18160046 1001900 1 2010 -3232.09091 -0.499757020 0.07833606 0.11517690 0.3062926
数据框“gdata”包含相同代码(如kdata中),但重复多次(有些重复36次,有些重复35次等)。我想要做的是在gdata中创建一个新列,其中包含从kdata中提取的相应集群。请注意,gdata和kdata的大小并不相同,正如我已经提到的,gdata中的代码都在kdata中找到,但是它们会重复多次以使gdata的大小远大于KDATA。
所以期望的结果是:
> head(gdata)
`code Month Year MonthKpi.3.1 MonthKpi.4 MonthKpi.7 MonthKpi.8 MonthKpi.9 cluster`
7959973 1001218 1 2010 -4721.50943 -0.743661905 0.06113550 0.15366151 0.2892823 2
5256388 1001039 1 2010 -1180.66667 -0.081875509 0.06277033 0.09753102 0.3749104 3
19304425 1001978 1 2010 -67.46296 -0.006731238 0.01908687 0.06382502 0.6990651 2
592175 1000107 1 2010 458.61538 0.019967915 0.11607883 0.13124782 0.3024831 1
32464177 1002863 1 2010 -4037.80000 -0.492330578 0.02269961 0.10713102 0.3161038 1
18160046 1001900 1 2010 -3232.09091 -0.499757020 0.07833606 0.11517690 0.3062926 1
让我补充一个事实,即在添加“cluster”列之后我想在 gdata 中保留我的观察序列(即我不希望有类似的代码彼此相邻。 谢谢
答案 0 :(得分:0)
您可以使用merge
:
merge(gdata, kdata[c("cluster", "code")], by = "code", sort = FALSE)
结果:
code Month Year MonthKpi.3.1 MonthKpi.4 MonthKpi.7 MonthKpi.8
1 1001218 1 2010 -4721.509 -0.74366190 0.06113550 0.15366151
2 1001039 1 2010 -1180.667 -0.08187551 0.06277033 0.09753102
MonthKpi.9 cluster
1 0.2892823 3
2 0.3749104 3
请注意。在您的示例中,并非kdata
中存在gdata
的所有代码。使用实际数据,结果数据框将与gdata
具有相同的行数。