首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于不同长度数据之间匹配Idenitifier的r-插入行

基于不同长度数据之间匹配Idenitifier的r-插入行
EN

Stack Overflow用户
提问于 2019-10-12 03:34:45
回答 1查看 58关注 0票数 0

我正在使用一个拥有7000多个观测数据的数据,其中每个应答者都被分配了一个数字值来标识他们的地理位置。

代码语言:javascript
运行
复制
#DF 1

USER_ID   Col2   ...   NumIdentifier
  45        4                101
  12        9                98
  97        19               7
  11        3                104
  54        1                109
  2         23               110
  ...       ...              ...

现在,我得到了额外的信息(Var1,Var2),根据这个数字地理标识符,这些信息只需要分配给一些应答者。

代码语言:javascript
运行
复制
#DF 2

NumIdentifer   Var1   Var2
   101          13     20
   104          16     87
   109          34     21
   ...         ...     ...

‘df2’包含每一个数字地理标识符的一行,并包含比‘df1’中的地理标识符更小的子集。在‘df2’中大约有30行。

作为第一步,我已经从‘df1’构建了一个新的数据have,它只包括带有'DF 2‘中数字标识符的应答者。

代码语言:javascript
运行
复制
#DF 3
USER_ID   Col2   ...   NumIdentifier
  45        4                101
  11        3                104
  54        1                109
  ...       ...              ...

我的理想输出是这样的。如果‘df2’中的数字标识符等于‘df3’中的数字标识符,那么将插入对应行的Var1和Var2。

代码语言:javascript
运行
复制
#DF 3
USER_ID   Col2   ...   NumIdentifier   Var1   Var2
  45        4                101        13     20
  11        3                104        16     87
  54        1                109        34     21
  ...       ...              ...        ...   ...

试图从这两个职位转移一些技术,但没有成功:

  • -两个数据的r匹配和在“
  • ”R条件下从一个数据中插入行-根据两个匹配条件“

”替换数据中的值

我想知道是否有其他的资源或独到的见解可能会有帮助。这两个帖子中的方法似乎只有在具有相同行数的数据文件之间进行匹配和条件替换时才有效。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-12 04:58:40

这方面有三种方法。

  1. 使用合并函数(本机)
  2. 使用dplyr
  3. 使用sqldf库

我的首选是本机/dplyr,因为sqldf实际上将数据转换为SQLite db,因此需要额外的内存。

代码语言:javascript
运行
复制
> df1 <- data.frame("NumIdentifier" = c(101,98,7,104,109,11), "USER_ID" = c(45,12,97,11,54,2), "Col2" = c(4,9,19,3,1,23))
> df1
  NumIdentifier USER_ID Col2
1           101      45    4
2            98      12    9
3             7      97   19
4           104      11    3
5           109      54    1
6            11       2   23

> df2 <- data.frame("NumIdentifier" = c(101,104,109), "Var1" = c(13,16,34), "Var2" = c(20,87,21))

> df2
  NumIdentifier Var1 Var2
1           101   13   20
2           104   16   87
3           109   34   21

dplyr中的Merge()函数

代码语言:javascript
运行
复制
df3 <- merge(x = df1, y = df2, by = "NumIdentifier", all.y = TRUE)
> df3
  NumIdentifier USER_ID Col2 Var1 Var2
1           101      45    4   13   20
2           104      11    3   16   87
3           109      54    1   34   21

平方

代码语言:javascript
运行
复制
> library(sqldf)
> df4 <- sqldf("SELECT * FROM df2 LEFT JOIN df1 USING(NumIdentifier)")
> df4
  NumIdentifier Var1 Var2 USER_ID Col2
1           101   13   20      45    4
2           104   16   87      11    3
3           109   34   21      54    1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58350625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档