I have 2 dataframes. One is an empty dataframe called 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. The first row is EUR and the second row is USD.
1999 2000 2001 2002
NA NA 89.08 NA
NA NA 60.2 NA
Eventually I want this final 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. I figure I have to use rbind or something but I don't know how.
If I understood it right, you could use function 'gather()' of tidyr
and so use within()
function of 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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.