我有兩個數據幀,df1
和df2
用相同的列標題
x <- c(1,2,3)
y <- c(3,2,1)
z <- c(3,2,1)
names <- c("id","val1","val2")
df1 <- data.frame(x, y, z)
names(df1) <- names
a <- c(1, 2, 3)
b <- c(1, 2, 3)
c <- c(3, 2, 1)
df2 <- data.frame(a, b, c)
names(df2) <- names
和AM執行合併
#library(dplyr) # not needed for merge
joined_df <- merge(x=df1, y=df2, c("id"),all=TRUE)
這給我joined_df
中的列爲id, val1.x, val2.x, val1.y, val2.y
問題
有沒有辦法共同找到了在原始數據幀相同的標題,給所加入的數據幀id, val1.x, val1.y, val2.x, val2.y
列順序列?
請注意,在我的實際數據框中,我有115列,所以如果可能的話,我想避免使用joned_df <- joined_df[, c(1, 2, 4, 3, 5)]
。
更新/編輯:另外,我想維護列標題的原始順序,所以按字母順序排序不是一個選項(在我的實際數據中,我意識到它可以與我給出的示例一起使用)。
我期望的輸出是
id val1.x val1.y val2.x val2.y
1 1 3 1 3 3
2 2 2 2 2 2
3 3 1 3 1 1
更新與解決方案,一般情況下
接受的答案解決了我的問題很好。 我在這裏稍微修改了代碼以使用原始列名稱,而不必在rep
函數中對它們進行硬編碼。
#specify columns used in merge
merge_cols <- c("id")
# identify duplicate columns and remove those used in the 'merge'
dup_cols <- names(df1)
dup_cols <- dup_cols [! dup_cols %in% merge_cols]
# replicate each duplicate column name and append an 'x' and 'y'
dup_cols <- rep(dup_cols, each=2)
var <- c("x", "y")
newnames <- paste(dup_cols, ".", var, sep = "")
#create new column names and sort the joined df by those names
newnames <- c(merge_cols, newnames)
joined_df <- joined_df[newnames]
的數據幀'dplyr'負載是多餘的。 'merge'函數在'base'中。可以使用'joined_df [c('id','val1.x','val2.x','val1.y','val2.y')]' –
,我用它來做其他事情,並且意外地複製它。 – tospig