簡體   English   中英

從R中的3個data.frames創建一個data.frame

[英]Make a data.frame from 3 data.frames in R

我在R中有一個問題,我無法弄清楚如何解決。 我有3個數據框,例如:

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])); 

但它不起作用。 有沒有辦法解決這個問題?

您正在尋找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

與Roland相同的想法,但一個線性解決方案和任意數量的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM