【问题标题】:Add missing unique rows to data.frame将缺少的唯一行添加到 data.frame
【发布时间】: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 之间的差异有更好的了解,我可能会使用 dplyrreshape2 来添加缺失的行。

&gt; 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

&gt; 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 &lt;- expand.grid(a=c("1-2","3-5","5-10"),b=c("f","m","unspec"))
  • 您已经就该数据集提出了很多个问题。花点时间学习 R 语言而不是让 SO 人为你编写程序可能是值得的。
  • @RichardScriven 哎呀,我应该解释一下我的尝试。忍受我它令人难以置信的低效。我用 tdx 的缺失行对 dx 进行了子集化(即(extra &lt;- dx[8,]) (extra[,3] &lt;- NA)然后使用rbind 我将 tdx 与这些子集组合以制作另一个 data.frame。然后我将其安排回正常。它可以工作,但我宁愿有更多执行此操作的高效和自动化方式(对于我的其他数据集)
  • @hrbrmstr 我希望我有时间。学习 R 对我来说将是一次体验式学习的机会,如果这违反了 SO 社区准则,我深表歉意。

标签: r dplyr reshape2


【解决方案1】:

最终起作用的是merge(dx, tdx, by=c('Gender','Age'), all=TRUE)

感谢马特。

【讨论】:

  • 合并工作正常,但这是使用 dplyr left_join(dx,tdx, by=c('Gender','Age')) 的一种方式
猜你喜欢
  • 2022-12-18
  • 1970-01-01
  • 2017-07-09
  • 2012-02-22
  • 2021-05-12
  • 2020-11-18
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多