2011-09-16 34 views
7

Tôi muốn cbind hai khung dữ liệu và loại bỏ các cột bị trùng lặp. Ví dụ:Kết hợp hai khung dữ liệu và xóa các cột trùng lặp

df1 <- data.frame(var1=c('a','b','c'), var2=c(1,2,3)) 
df2 <- data.frame(var1=c('a','b','c'), var3=c(2,4,6)) 

cbind(df1,df2) #this creates a data frame in which column var1 is duplicated 

Tôi muốn tạo ra một khung dữ liệu với cột var1, var2var3, trong đó cột var2 không lặp lại.

Trả lời

8

merge sẽ thực hiện công việc đó.

thử:

merge(df1, df2) 
+2

Có không có mâu thuẫn với ví dụ được đề cập, nhưng sẽ có các giá trị lệch trong var1, các trường hợp đó sẽ bị xóa với hợp nhất; ví dụ. thử 'df2 <-data.frame (var1 = c ('a', 'b', 'd'), var3 = c (2,4,6))'. Điều này có liên quan đến các trường hợp tên biến bị trùng lặp, nhưng dữ liệu tương ứng thì không. –

1

Trong trường hợp bạn thừa hưởng bộ dữ liệu của người khác và kết thúc với cột trùng lặp bằng cách nào đó và muốn để đối phó với họ, đây là một cách tốt đẹp để làm điều đó:

for (name in unique(names(testframe))) { 
    if (length(which(names(testframe)==name)) > 1) { 
    ## Deal with duplicates here. In this example 
    ## just print name and column #s of duplicates: 
    print(name) 
    print(which(names(testframe)==name)) 
    } 
} 
Các vấn đề liên quan