R 如何将一个数据帧的行添加到另一个数据帧的列中
我有两个数据帧。一个是称为euro_adj的空数据帧:R 如何将一个数据帧的行添加到另一个数据帧的列中,r,dataframe,transpose,R,Dataframe,Transpose,我有两个数据帧。一个是称为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 最终,我想要这
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)
但它不起作用,因为空数据帧现在只有一行。我想我必须使用rbind或其他东西,但我不知道如何使用。如果我理解正确,您可以使用
tidyr的函数“gather()”
,然后使用内的,基的函数
检查它是否解决了您的问题:
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
如果我理解正确,您可以使用tidyr的函数“gather()”
,也可以使用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
首先将它们转换为相同的格式(长/宽),然后添加一个公共变量,merge/left\u join
或干脆cbind
。要添加的中有多少列?它的名字是吗?@NelsonGon to_add(1999年至2012年)中的14列。直到2002年我才在这里提取。年份是变量的名称。首先将它们转换为相同的格式(长/宽),然后添加一个公共变量,merge/left\u join
或干脆cbind
。要添加的中有多少列?它的名字是吗?@NelsonGon to_add(1999年至2012年)中的14列。直到2002年我才在这里提取。年份是变量的名称。