[英]How can I add rows of a dataframe into columns of another
I have 2 dataframes. 我有2个数据框。 One is an empty dataframe called euro_adj: 一个是称为euro_adj的空数据框:
flow country year frequency currency percentage notes
1 NA NA NA NA NA NA NA
And another one called to_add that I want to "append" into this empty dataframe. 另外一个叫做to_add的我想“附加”到这个空的数据框中。 The first row is EUR and the second row is USD. 第一行是EUR,第二行是USD。
1999 2000 2001 2002
NA NA 89.08 NA
NA NA 60.2 NA
Eventually I want this final df: 最终我想要这个最终的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
I tried this 我试过了
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)
but it didn't work since the empty data frame only has 1 row right now. 但是它没有用,因为空数据框现在只有1行。 I figure I have to use rbind or something but I don't know how. 我认为我必须使用rbind之类的东西,但我不知道如何使用。
If I understood it right, you could use function 'gather()' of tidyr
and so use within()
function of base
. 如果我的理解是正确的,你可以使用函数“聚集()”的tidyr
等使用within()
的功能base
。
Check if it solve your problem: 检查它是否解决了您的问题:
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
Wich gives: 威奇给出:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.