【问题标题】:Creating new dataset by finding match in 2 other datasets in R通过在 R 中的 2 个其他数据集中找到匹配项来创建新数据集
【发布时间】:2011-09-25 06:42:22
【问题描述】:

我试图清楚,但如果不够清楚,我很抱歉......我有两个不同长度的数据集。在数据集 1 中,对于 col1 = x,col2 = y

数据集 1 =

col1  col2
0.1   0.21
0.1   0.22
0.2   0.4
0.34  0.3
0.4   0.36

同样,在数据集 2 中,对于 col3 = x,col4 = y

col3  col4
0.1   0.2
0.2   0.3
0.3   0.4
0.4   0.5
0.5   0.6
0.6   0.7
0.7   0.8

col1 和 col3 中的某些值匹配,因此我想创建一个新数据集,其中写入 col1 中找到的所有值(在 col3 中找到但不是 col1 的所有值都被忽略)但它们的“匹配”编号在 col4 这样

new_col1 new_col4
0.1      0.2
0.1      0.2
0.2      0.3
0.34     NA
0.3      0.4

您能解释一下我该怎么做吗?谢谢。

【问题讨论】:

  • 我忘了说我的两个数据集的小数位数不同,例如我在 col1 0.1、0.1 等和 col3 0.1111、0.2222 中有。您能否告诉我如何将 col1 和 col3 匹配到小数点后 1 个数字内,即 0.1 匹配 0.1111。谢谢!!

标签: r


【解决方案1】:

使用merge:

dat1 <- data.frame(col1=c(0.1,0.1,0.2,0.34,0.4),col2=c(0.21,0.22,0.4,0.3,0.36))
dat2 <- data.frame(col3=(1:7)/10,col4=(2:8)/10)

> merge(dat1, dat2, by.x="col1", by.y="col3", all.x=TRUE)[-2]
  col1 col4
1 0.10  0.2
2 0.10  0.2
3 0.20  0.3
4 0.34   NA
5 0.40  0.5

by 参数指定要匹配的列,all.x=TRUE 告诉它使用所有第一个数据帧,最后的子集 [-2] 是从输出中删除 col2

编辑:

对于您的额外要求,请在合并前使用dat2$col3 &lt;- trunc(dat2$col3*10)/10

【讨论】:

  • 非常感谢您的快速回答!关于我的小数问题,您的解决方案不起作用,可能是因为我没有清楚地解释自己。我通过创建以下函数trunc.dig &lt;- function(x, digits) trunc(x*10^digits)/10^digits 使用了link 中的解决方案建议
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多