cbind有不同的行,忽略了第二个df的额外行

时间:2017-07-23 13:45:22

标签: r merge cbind

我有这个特定的数据框

df1 <- data.frame(ID = c(1,2,3,4), Type1 = c("A","B","A","B")) 
ID  Type1
1       A
2       B
3       A
4       B

df2 <- data.frame(Length = c("0.75","1.25","1.75","2.25","2.75","3.25")) 
Length  
0.75 
1.25
1.75
2.25
2.75
3.25

通常我会使用cbind来组合列,例如

dfnew <- head(cbind(df1, df2), 4)

但是,当它们有不同的行时会出现问题,所以我想知道是否有任何方法可以在cbind命令中指定忽略额外的行。

这是我正在寻找的结果

ID  Type1  Length
1       A    0.75
2       B    1.25
3       A    1.75
4       B    2.25

有什么建议吗?最好不必为Length

创建全新的数据帧

1 个答案:

答案 0 :(得分:0)

如果您正在寻找一个以两个数据帧作为输入的函数,那么这应该有效:

unequal_bind <-  function(df1, df2){
len1 <- nrow(df1)
len2 <- nrow(df2)
df_final <- cbind(df1[1:min(len1, len2), ], df2[1:min(len1, len2), ])
df_names <-  c(names(df1), names(df2))
df_final <- setNames(df_final, df_names)
}

df_out <- unequal_bind(df1, df2)

df_out

  ID Type1 Length
  1  1     A   0.75
  2  2     B   1.25
  3  3     A   1.75
  4  4     B   2.25