r - 如何使用 R 将两个数据帧的值相交

标签 r merge dataframe transpose cbind

我想为数据框创建一个新列,其中的值来自行和列的交集。

我有一个名为“时间”的数据框:

q   1    2   3   4    5
a   1    13  43  5    3
b   2    21  12  3353 34
c   3    21  312 123  343
d   4    123 213 123  35
e   4556 11  123 12   3

还有另一个表,称为“事件”:

q   dt
a   1
b   3
c   4
d   2
e   1

我想在第二个表上放置另一列名为 inter 的列,该列将填充第一个 data.frame 中 q 和列 dt 之间的交集处的值。所以结果是这样的:

q   dt  inter
a   1   1
b   3   12
c   4   123
d   2   123
e   1   4556

我尝试使用 merge(event, time, by.x = "q", by.y = "dt"),但它生成了它们不相同的错误ID。我还尝试转置时间 data.frame 以横截值,但没有成功。

最佳答案

library(reshape2)
merge(event, melt(time, id.vars = "q"), 
      by.x=c('q','dt'), by.y=c('q','variable'), all.x = TRUE)

输出:

  q dt value
1 a  1     1
2 b  3    12
3 c  4   123
4 d  2   123
5 e  1  4556

注释

我们使用包 reshape2 中的函数 melt 将数据帧 time 从宽格式转换为长格式。然后我们通过两列(事件中的 q 和 dt,融化时间中的 q 和变量)合并(左外连接)数据框 event 和融化的 时间

数据:

time <- structure(list(q = structure(1:5, .Label = c("a", "b", "c", "d", 
"e"), class = "factor"), `1` = c(1L, 2L, 3L, 4L, 4556L), `2` = c(13L, 
21L, 21L, 123L, 11L), `3` = c(43L, 12L, 312L, 213L, 123L), `4` = c(5L, 
3353L, 123L, 123L, 12L), `5` = c(3L, 34L, 343L, 35L, 3L)), .Names = c("q", 
"1", "2", "3", "4", "5"), class = "data.frame", row.names = c(NA, 
-5L))

event <- structure(list(q = structure(1:5, .Label = c("a", "b", "c", "d", 
"e"), class = "factor"), dt = c(1L, 3L, 4L, 2L, 1L)), .Names = c("q", 
"dt"), class = "data.frame", row.names = c(NA, -5L))

关于r - 如何使用 R 将两个数据帧的值相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445178/

相关文章:

r - 如何将 R 数据框导出到 Power Query 表

r - 什么会导致 r 合并中出现 “non-unique matches detected” 错误?

python - 使用 Pandas 合并数据框

python - Pandas 合并返回 NaN

python - Pandas 自动将行转换为列

r - 无法将值插入到 sqlite 表中

r - 如何根据包含键值对的分离值高效地派生新变量?

r - 如何触发 Shiny 的数据刷新?

python - 从 pandas 数据框中选择排序组的第一行

python-3.x - 在 Pandas 和 Numpy 中合并 DataFrame