【发布时间】:2014-10-13 02:15:24
【问题描述】:
所以我有两个长度不同的数据框。我试图通过添加 dx 中缺少 tdx 的行来使它们具有相似的长度。在这种情况下,tdx 缺少 Age == "UNSP" 的行。我还有其他可能缺少不同行的数据集;我正在寻找一种方法来识别缺少哪些行,然后为输出添加这些行; Years 列(对于该行)将是 NA 值。
更清楚的是,输出将是一个数据框,其中 tx 和 tdx 数据并排显示性别和年龄匹配。
这是我尝试过的(感谢 Richard 指出我忘记添加此内容)
(extra <- rbind(dx[8,],dx[16,]))
(extra[,3] <- NA)
ttdx <- rbind(extra,tdx, deparse.level = 1)
然后我把它恢复正常。它有效,但我宁愿有一种更有效和自动化的方式来执行此操作(对于我的其他数据集)
如果我对如何通过计算机识别 data.frames 之间的差异有更好的了解,我可能会使用 dplyr 或 reshape2 来添加缺失的行。
> head(dx,n = 12L)
Gender Age Year.10 Year.11 Year.12 Year.13
1 FEMALE 0-2 48020 43120 39120 14360
2 FEMALE 3-9 87930 101850 98750 85400
3 FEMALE 10-19 5700 47730 53590 18800
4 FEMALE 20-39 147230 134560 62090 71120
5 FEMALE 40-59 202770 142230 116120 98830
6 FEMALE 60-64 34980 49170 46260 110120
7 FEMALE 65+ 256240 296710 254040 266690
8 FEMALE UNSP 5500 NA NA NA
9 MALE 0-2 75170 52990 28110 32160
10 MALE 3-9 66360 89840 79220 39470
11 MALE 10-19 62960 15060 26700 26310
12 MALE 20-39 39670 145380 101880 94500
> head(tdx, n = 12L)
Gender Age Year.10 Year.11 Year.12 Year.13
1 FEMALE 0-2 36800 24560 25790 12400
2 FEMALE 3-9 77980 75810 79560 74450
3 FEMALE 10-19 5700 47730 51470 18800
4 FEMALE 20-39 147230 102400 42360 58190
5 FEMALE 40-59 179550 112510 105000 79140
6 FEMALE 60-64 33800 37380 35040 83670
7 FEMALE 65+ 206270 202790 185460 225620
8 MALE 0-2 59930 46350 28110 26490
9 MALE 3-9 53260 62770 71350 32380
10 MALE 10-19 60490 15060 25260 20660
11 MALE 20-39 32490 132830 94950 88640
12 MALE 40-59 57950 70370 149790 136730
【问题讨论】:
-
你有没有尝试过?
-
使用
expand.grid制作一个涵盖所有组合的主列表,然后merge将您的数据返回到此,例如:master <- expand.grid(a=c("1-2","3-5","5-10"),b=c("f","m","unspec")) -
您已经就该数据集提出了很多个问题。花点时间学习 R 语言而不是让 SO 人为你编写程序可能是值得的。
-
@RichardScriven 哎呀,我应该解释一下我的尝试。忍受我它令人难以置信的低效。我用 tdx 的缺失行对 dx 进行了子集化(即
(extra <- dx[8,]) (extra[,3] <- NA)然后使用rbind我将 tdx 与这些子集组合以制作另一个 data.frame。然后我将其安排回正常。它可以工作,但我宁愿有更多执行此操作的高效和自动化方式(对于我的其他数据集) -
@hrbrmstr 我希望我有时间。学习 R 对我来说将是一次体验式学习的机会,如果这违反了 SO 社区准则,我深表歉意。