【发布时间】:2019-09-24 08:13:49
【问题描述】:
我有两个整洁的小标题,其中一个匹配的键列 (ID) 和几个具有相同名称但行值不同的列。 我想通过 ID 加入这两个小标题,并将 df2 的附加测量值、时间戳和值添加到 df1 中的相应列。
到目前为止,我已经尝试过full_join、merge、left_join等:
joined_df <- full_join(df1, df2, by="ID")
但这会返回一个带有额外时间、值和测量列(time.x、value.x 等)的小标题。
但是,我想将这些额外的 df2 值按 ID 添加到 df1 的现有列中,以便生成的 df 添加了行,但没有添加列。
这是一个例子:
df1 <- data.frame(ID = c(1, 2, 3, 4, 1, 2, 3, 4),
time = c(1,2,3,4,5,6,7,8),
value = c(1, 2, 3, 4, 5, 6, 7, 8)
measurement = c(x,s,d,g,u,b,z,e)
xy = c(g,h,j,k,t,d,g,t)
df2 <- data.frame(ID = c(1, 2, 3, 4, 1, 2, 3, 4),
time = c(11,12,13,14,15,16,17,18),
value = c(8, 7, 6, 5, 4, 3, 2, 1),
measurement = c(r,t,z,u,i,o,k,f)
ab = c(j,k,o,l,p,f,b,c)
我需要的是一个连接函数,它通过从 df2 中添加的行数来扩展 ID 列,并将 df2 中的其他测量值、值和时间戳包含到 df1 的现有列中。 预期的输出是:
df3 <- data.frame(ID = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
time = c(1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18),
value = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 1)
measurement = c(x,s,d,g,u,b,z,e,r,t,z,u,i,o,k,f)
xy = c(g,h,j,k,t,d,g,t,g,h,j,k,t,d,g,t)
ab = c(j,k,o,l,p,f,b,c,j,k,o,l,p,f,b,c))
不知怎的,我无法找到某事。还是那样。非常感谢您!
【问题讨论】:
-
试试
dplyr::bind_rows(df1, df2) -
是的,这是真的,但问题是我在两个 dfs 中还有其他列(忘记在示例中添加它们,抱歉),我想按 ID 添加。所以基本上(这里)“xy”和“ab”列应该按ID添加,“测量”和“值”列应该扩展。
-
在合并时为这两个数据帧提供预期的输出。
-
我做到了(df3)。我尝试绑定行,然后通过 fieldId 仅对每个数据帧的附加列进行 full_join,但这使我的 R 崩溃 O.o
标签: r join dplyr tidyverse tibble