首页 > 解决方案 > 如何将数据框的行添加到另一个数据框的列中

问题描述

我有 2 个数据框。一个是一个名为 euro_adj 的空数据框:

 flow country year frequency currency percentage notes
1   NA      NA   NA        NA       NA         NA    NA

还有一个叫 to_add 的我想“追加”到这个空数据框中。第一行是欧元,第二行是美元。

1999 2000 2001 2002 
 NA   NA 89.08  NA
 NA   NA  60.2  NA

最终我想要这个最终的df:

flow   country year frequency currency percentage notes
Export Austria 1999   Annual     EUR       NA         NA   
Export Austria 2000   Annual     EUR       NA         NA 
Export Austria 2001   Annual     EUR       89.08      NA 
Export Austria 2002   Annual     EUR       NA         NA 
Export Austria 1999   Annual     USD       NA         NA 
Export Austria 2000   Annual     USD       NA         NA 
Export Austria 2001   Annual     USD      60.2        NA
Export Austria 2002   Annual     USD       NA         NA  

我试过这个

  to_add_transpose = as.data.frame(t(to_add))
  colnames(to_add_transpose) = c("EUR", "USD")
  euro_adj$country = rep("Austria", ncol(to_add)*2)
  euro_adj&flow = rep("Exports", ncol(to_add)*2)
  euro_adj$year = rep(1999:2012, 2)
  euro_adj$frequency = rep("Annual", ncol(to_add)*2)
  euro_adj$percentage = c(to_add_trasnpose$EUR, to_add_transpose$USD)

但它不起作用,因为空数据框现在只有 1 行。我想我必须使用 rbind 或其他东西,但我不知道如何。

标签: rdataframetranspose

解决方案


如果我理解正确,您可以使用函数 'gather()' 等tidyr使用.within()base

检查它是否解决了您的问题:

library(dplyr)
library(tidyr)



# Yours data
to_add = data.frame(a=c(NA,NA),  
                    b=c(NA,NA), 
                    c=c(89.08,60.2),
                    d=c(NA,NA)
) 
colnames(to_add) = c("1999","2000","2001","2002")

# Creating column of "coin"
to_add["coin"] = c("EUR","USD")


# Just numbers of rows and columns
nr = nrow(to_add)
nc = ncol(to_add)-1

# Transforming data, like "transpose"
to_add = gather(data = to_add,"year","value",1:4)


# build another data frame
euro_adj = data.frame(flow=rep("Exports", nc*nr),
                      country=rep("Austria", nc*nr),
                      year=rep(1999:2002, nr),
                      frequency=rep("Annual", nc*nr),
                      # Set curency by order
                      currency= to_add[order(to_add$coin),"coin"],
                      percentage=NA[1:nc*nr],
                      notes=NA[1:nc*nr]
                      )

# set values

set = to_add[!is.na(to_add$value),c("coin","year","value")]

euro_adj = euro_adj %>% 
            within(percentage[year %in% set$year & currency %in% set$coin] <- set$value)

# Print data frame 
euro_adj

威奇给出:

   flow country year frequency currency percentage notes
Exports Austria 1999    Annual      EUR         NA    NA
Exports Austria 2000    Annual      EUR         NA    NA
Exports Austria 2001    Annual      EUR      89.08    NA
Exports Austria 2002    Annual      EUR         NA    NA
Exports Austria 1999    Annual      USD         NA    NA
Exports Austria 2000    Annual      USD         NA    NA
Exports Austria 2001    Annual      USD      60.20    NA
Exports Austria 2002    Annual      USD         NA    NA

推荐阅读