Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 连接两个数据帧以填充缺少的数据_R_Dataframe_Join_Dplyr_Merge - Fatal编程技术网

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>