我想为数据框创建一个新列,其中的值来自行和列的交集。
我有一个名为“时间”的数据框:
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/