R 连接两个数据帧以填充缺少的数据
我有两个不同的数据帧:R 连接两个数据帧以填充缺少的数据,r,dataframe,join,dplyr,merge,R,Dataframe,Join,Dplyr,Merge,我有两个不同的数据帧: 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)), mi
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)))
但是,这不会用df2中的字符串替换丢失的单元格(以黄色突出显示)
我们可以使用
数据。表包:
库(data.table)
setDT(df1)[setDT(df2),`:=`(timestamp=i.timestamp,
text1=i.text1,
text2=i.text2,
text3=i.text3),
on=(id,number)][]##可能需要将'group'列添加到'on'参数
#>组id编号分钟提示时间戳text1 text2 text3
#>1:1分钟提示1 xxxxxx字符串
#>2:1分钟提示2 2 xxxxxx字符串
#>3:1分钟提示3 4 xxxxxx字符串
#>4:2分钟提示1 b 9 xxxxxx字符串
#>5:2分钟提示2 b 18 xxxxxx字符串
#>6:2分钟提示3 b 27 xxxxxx字符串
#>7:2分钟提示4 b 36 xxxxxx
#>8:1分钟提示1 c 2 xxxxxx字符串
#>9:1分钟提示2 c 3 xxxxxx字符串
#>10:1分钟提示3 c 5 xxxxxx字符串
如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,那么就更容易为您提供帮助。我们不需要您所有的真实数据,只需要一些小数据就可以帮助您了解发生了什么。您不需要指定要加入的字段。默认情况下,dplyr::full_join
将在两个集合之间的任何公共列名称上进行连接,不一定是id
和number
。谢谢您的冻糕。我想R把df2的所有变量都当作键。但我如何指定列?@NadineM。在本例中,您只需添加参数by=character vector of column names
,因此在本例中full_join(df1,df2,by=c(“id”,“number”)
将在id和number上进行连接请在代码问题中给出一个--cut&paste&runable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的R/SQL,并将其作为格式化为表的代码输入。在总体目标上暂停工作,将代码切掉到第一个表达,不要给出你期望的内容,说出你期望的内容和原因。非常感谢,你的代码运行得非常好。我不必添加“组”列:-)。
full_join(df1, df2) %>%
group_by("id", "number")
#> group id number minutesPrompt timestamp text1 text2 text3
#> 1: 1 minutesPrompt1 a 1 xxxxxx String <NA> <NA>
#> 2: 1 minutesPrompt2 a 2 xxxxxx <NA> String <NA>
#> 3: 1 minutesPrompt3 a 4 xxxxxx <NA> <NA> String
#> 4: 2 minutesPrompt1 b 9 xxxxxx String <NA> <NA>
#> 5: 2 minutesPrompt2 b 18 xxxxxx <NA> <NA> String
#> 6: 2 minutesPrompt3 b 27 xxxxxx <NA> String <NA>
#> 7: 2 minutesPrompt4 b 36 xxxxxx <NA> <NA> <NA>
#> 8: 1 minutesPrompt1 c 2 xxxxxx String String <NA>
#> 9: 1 minutesPrompt2 c 3 xxxxxx String <NA> <NA>
#> 10: 1 minutesPrompt3 c 5 xxxxxx String <NA> <NA>