【发布时间】:2020-11-13 17:13:10
【问题描述】:
我有两个不同的数据框:
df1 <- tibble(group = c(rep(1, 3), rep(2, 4), rep(1, 3)),
id = paste0("minutesPrompt", c(1, 2, 3, 1, 2, 3, 4, 1, 2, 3)),
number = c(rep("a", 3), rep("b", 4), rep("c", 3)),
minutesPrompt = c(1, 2, 4, 9, 18, 27, 36, 2, 3, 5),
timestamp = rep("xxxxxx", 10),
text1 = c("String", rep(NA_character_, 6), rep("String", 3)),
text2 = c(NA_character_, "String", rep(NA_character_, 5), "String", rep(NA_character_, 2)),
text3 = c(rep(NA_character_, 2), "String", rep(NA_character_, 7)))
df2 <- tibble(group = rep(2, 7),
id = paste0("minutesPrompt", c(1, 2, 3, 4, 1, 2, 3)),
number = c(rep("b", 4), rep("x", 3)),
minutesPrompt = NA,
timestamp = rep("xxxxxx", 7),
text1 = c("String", rep(NA_character_, 6)),
text2 = c(rep(NA_character_, 2), "String", rep(NA_character_, 4)),
text3 = c(NA_character_, "String", rep(NA_character_, 5)))
-
df1(第一张图片)真的很大:这个数据框由很多变量组成,包括 3 个不同组的值。对于每个参与者,它还有 7 行,由 id 表示。 -
df2(第二张图片)相反仅包含仅针对一组显示的变量。数据集之间的区别还在于 df1 有一些缺失值(黄色)。应传输到这些空单元格中的字符串包含在 df2(橙色)中。
我的计划是进行完全连接,以便我可以用提供的 df2 值替换 df1 中关于“timestamp”、“text1”、“text2”直到“text7”的缺失信息。我试过这个:
full_join(df1, df2) %>%
group_by("id", "number")
但是,这不会用 df2 中的字符串替换我丢失的单元格(以黄色突出显示)。
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。我们不需要您的所有真实数据,只需一些小数据就可以帮助您了解正在发生的事情。
-
您没有指定要加入的字段。默认情况下,
dplyr::full_join将连接两个集合之间的任何公共列名,不一定是id和number。 -
谢谢芭菲。 R 将我所有的 df2 变量作为我猜的键。但是如何指定列?
-
@NadineM。在这种情况下,您只需添加参数
by = character vector of column names,因此在这种情况下,full_join(df1,df2, by = c("id", "number"))将加入 id 和 number -
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表格的代码的 R/SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
标签: r dataframe join dplyr merge