【问题标题】:r data.table merging on multiple by.x and by.y variables [duplicate]r data.table 合并多个 by.x 和 by.y 变量[重复]
【发布时间】:2021-03-06 17:19:07
【问题描述】:

我目前正在使用 data.table 并尝试合并两个类似于以下内容的表:

wflanthro:

height   sex   l
18       1     2
18       2     2.4
19       1     3
19       2     3
20       1     3.1
20       2     3.2
21       1     4
21       2     4
22       1     5
22       2     5.1

长度:

ID low.len  sex
1  20       1
2  21       2
3  22       1
4  21       1
5  19       2

我想通过将两者合并得到下表:(注意low.len和height是相互合并的)

ID low.len  sex   l
1  20       1     3.1
2  21       2     4
3  22       1     5
4  21       1     4
5  19       2     3

我已经阅读了 by.y 和 by.x 语句的用法,并希望在这里使用它,但是我没有运气在 by.y 和 by.x 向量中使用超过 1 个变量

这是我尝试过的:

 l_value_diff_len_gr_0<-merge(wflanthro,length,by.x=("height", "sex"), by.y=("low.len","sex"))

这会出错并且不起作用。我不想使用 setnames 语句正式更改变量的名称,因为我必须在各种变量集上生成几个具有与上述相同格式的表,因此弄清楚如何将它们与上面编写的代码类似地合并更改变量名称是理想的。我做错了什么?

【问题讨论】:

  • 您的示例中没有名称为 htcm 的列
  • @akrun 感谢您的关注!这是我在帖子中的一个意外错误,但并没有解决该错误。我刚刚用高度变量名更新了它
  • 错误是什么?请张贴其确切信息。此外,请务必避免将对象命名为 R 函数和 length 等关键字。
  • 如果这是一个 data.table 问题,应该按照以下方式完成library(data.table) ; setDT(wflanthro) ; setDT(length) ; wflanthro[length, l := i.l, on = .(low.len = height, sex)]。然后检查wflanthro - 它应该就地更新

标签: r merge data.table


【解决方案1】:

使用合并功能是错误的。

用两个合并键合并两个数据框是正确的。

# Input
wflanthro <- structure(list(ID = c(1, 2, 3, 4, 5), low.len = c(20, 21, 22, 
21, 19), sex = c(1, 2, 1, 1, 2)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

length <- structure(list(height = c(18, 18, 19, 19, 20, 20, 21, 21, 22, 
22), sex = c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2), l = c(2, 2.4, 3, 
3, 3.1, 3.2, 4, 4, 5, 5)), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

# merge
l_value_diff_len_gr_0 <- merge(wflanthro, length, by.x=c("height", "sex"), by.y=c("low.len","sex")) %>% arrange(ID)

l_value_diff_len_gr_0

      height sex   l ID
    1     20   1 3.1  1
    2     21   2 4.0  2
    3     22   1 5.0  3
    4     21   1 4.0  4
    5     19   2 3.0  5

有什么问题吗?

【讨论】:

  • 你有如何做到这一点的例子吗?
  • 我修改了答案。
  • 为什么使用合并功能会是一个错误,尤其是因为您的答案使用了它?
  • 我的意思... "c(" 应该包含在密钥中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
相关资源
最近更新 更多