我正在使用一个拥有7000多个观测数据的数据,其中每个应答者都被分配了一个数字值来标识他们的地理位置。
#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),根据这个数字地理标识符,这些信息只需要分配给一些应答者。
#DF 2
NumIdentifer Var1 Var2
101 13 20
104 16 87
109 34 21
... ... ...
‘df2’包含每一个数字地理标识符的一行,并包含比‘df1’中的地理标识符更小的子集。在‘df2’中大约有30行。
作为第一步,我已经从‘df1’构建了一个新的数据have,它只包括带有'DF 2‘中数字标识符的应答者。
#DF 3
USER_ID Col2 ... NumIdentifier
45 4 101
11 3 104
54 1 109
... ... ...
我的理想输出是这样的。如果‘df2’中的数字标识符等于‘df3’中的数字标识符,那么将插入对应行的Var1和Var2。
#DF 3
USER_ID Col2 ... NumIdentifier Var1 Var2
45 4 101 13 20
11 3 104 16 87
54 1 109 34 21
... ... ... ... ...
试图从这两个职位转移一些技术,但没有成功:
”替换数据中的值
我想知道是否有其他的资源或独到的见解可能会有帮助。这两个帖子中的方法似乎只有在具有相同行数的数据文件之间进行匹配和条件替换时才有效。
发布于 2019-10-12 04:58:40
这方面有三种方法。
我的首选是本机/dplyr,因为sqldf实际上将数据转换为SQLite db,因此需要额外的内存。
> 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()函数
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
平方
> 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
https://stackoverflow.com/questions/58350625
复制相似问题