2013-12-15 79 views
1

我在R中遇到问题,我无法弄清楚如何解决。我有例3个的数据帧:从R的3个data.frames中创建一个数据框架

data1 = 
Stuff Freq 
X  12 
Y  3 
Z  4 

data2 = 
Stuff Freq 
X  6 
Y  5 
W  8 

data3 = 
Stuff Freq 
Z  7 
Y  4 

我想使这些一个data.frame,看起来像这样:

data = 
Stuff Freq1 Freq2 Freq3  
X   12  6  0 
Y   3  5  7 
Z   4  0  4 
W   0  8  0 

我尝试这样做:

data <- as.data.frame(c(data1[,1], data2[,1], data3[,1]), cbind(data1[,2], data2[,2], data3[,2])); 

但它不起作用。有没有什么可能的方法来解决这个问题?

回答

2

您正在寻找merge

data1 <- data.frame(Stuff=c("X","Y","Z"), Freq=c(12,3,4)) 
data2 <- data.frame(Stuff=c("X","Y","W"), Freq=c(6,5,8)) 
data3 <- data.frame(Stuff=c("Z","Y"), Freq=c(7,4)) 

res <- merge(merge(data1, data2, by="Stuff", all=TRUE), 
      data3, by="Stuff", all=TRUE) 
names(res)[-1] <- paste0("Freq", 1:3) 

res[is.na(res)] <- 0 

# Stuff Freq1 Freq2 Freq3 
# 1  X 12  6  0 
# 2  Y  3  5  4 
# 3  Z  4  0  7 
# 4  W  0  8  0 
+0

谢谢!有用! – Horv

1

相同的思路罗兰但一个班轮解决方案,一般为任意数量的data.frames的:

Reduce(function(x,y){ 
      res <- merge(x,y,by=1,all=T) 
      res[is.na(res)] <- 0 
      res 
     }, 
    mget(ls(pattern='data.*'))) 
    Stuff Freq.x Freq.y Freq 
1  X  12  6 0 
2  Y  3  5 4 
3  Z  4  0 7 
4  W  0  8 0 
+0

感谢您的一般解决方案! – Horv

相关问题