gpt4 book ai didi

r - 如何在 R 中引用查找表将两个 data.frame 合并在一起

转载 作者:行者123 更新时间:2023-12-02 04:11:40 25 4
gpt4 key购买 nike

我正在尝试根据每个 data.frames 中名为 series_id 的公共(public)列名称将两个 data.frames 合并在一起。这是我的合并语句:

merge(test_growth_series_LUT,  test_growth_series, by = intersect(series_id, series_id))

我遇到的错误是

Error in as.vector(y) : object 'series_id' not found

帮助给出了这个描述,但我不明白为什么它找不到series_id。示例数据如下:

### S3 method for class 'data.frame':
#merge(x, y, by = intersect(names(x), names(y)),
# by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
# sort = TRUE, suffixes = c(".x",".y"), ...)



# Create a long data.frame to store data...
test_growth_series = data.frame ("read_day" = c(0, 3, 9, 0, 3, 9, 0, 2, 8),
"series_id" = c("p1s1", "p1s1", "p1s1", "p1s2", "p1s2", "p1s2", "p3s4", "p3s4", "p3s4"),
"mean_od" = c(0.6, 0.9, 1.3, 0.3, 0.6, 1.0, 0.2, 0.5, 1.2),
"sd_od" = c(0.1, 0.2, 0.2, 0.1, 0.1, 0.3, 0.04, 0.1, 0.3),
"n_in_stat" = c(8, 8, 8, 8, 7, 5, 8, 7, 2)
)

# Create a name LUT
test_growth_series_LUT = data.frame ("series_id" = c("p1s1", "p1s2", "p3s4", "p4s2", "p5s2", "p6s2", "p7s4", "p8s4", "p9s4"),"description" = c("blah1", "blah2", "blah3", "blah4", "blah5", "blah6", "blah7", "blah8", "blah9")
)

> test_growth_series
read_day series_id mean_od sd_od n_in_stat
1 0 p1s1 0.6 0.10 8
2 3 p1s1 0.9 0.20 8
3 9 p1s1 1.3 0.20 8
4 0 p1s2 0.3 0.10 8
5 3 p1s2 0.6 0.10 7
6 9 p1s2 1.0 0.30 5
7 0 p3s4 0.2 0.04 8
8 2 p3s4 0.5 0.10 7
9 8 p3s4 1.2 0.30 2
> test_growth_series_LUT
series_id description
1 p1s1 blah1
2 p1s2 blah2
3 p3s4 blah3
4 p4s2 blah4
5 p5s2 blah5
6 p6s2 blah6
7 p7s4 blah7
8 p8s4 blah8
9 p9s4 blah9
>

这就是我想要实现的目标:

> new_test_growth_series
read_day series_id mean_od sd_od n_in_stat description
1 0 p1s1 0.6 0.10 8 blah1
2 3 p1s1 0.9 0.20 8 blah1
3 9 p1s1 1.3 0.20 8 blah1
4 0 p1s2 0.3 0.10 8 blah2
5 3 p1s2 0.6 0.10 7 blah2
6 9 p1s2 1.0 0.30 5 blah2
7 0 p3s4 0.2 0.04 8 blah3
8 2 p3s4 0.5 0.10 7 blah3
9 8 p3s4 1.2 0.30 2 blah3

最佳答案

你可以这样做:

merge(test_growth_series_LUT, test_growth_series)

它会自动匹配名称。如果您需要指定列,您可以这样做:

merge(test_growth_series_LUT, test_growth_series, by = "series_id")

或者如果您需要在两侧指定(仅当您想要匹配它们具有不同的名称时才需要):

merge(test_growth_series_LUT, test_growth_series, by.x = "series_id", by.y = "series_id")

我建议通过转到合并 (?merge) 帮助或调用 example("merge", "base")< 来查看示例(并逐步浏览它们) (不如自己实际走一遍有用。

两个注意事项:

  1. 您永远不需要在这里使用 intersect 函数。使用 c() 显式指定多个列名称。或者使用 allall.xall.y 参数指定您想要的联接类型。
  2. 在大多数情况下,除非您附加了数据,否则您将使用引号来指定列名称。否则它会提示无法找到该名称。特别是,当您不使用引号时,该名称需要位于搜索路径中。

关于r - 如何在 R 中引用查找表将两个 data.frame 合并在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com