我有以下数据框(简化),国家/地区变量作为因素,值变量具有缺失值:
country value
AUT NA
AUT 5
AUT NA
AUT NA
GER NA
GER NA
GER 7
GER NA
GER NA
Run Code Online (Sandbox Code Playgroud)
以下内容生成以上数据框:
data <- data.frame(country=c("AUT", "AUT", "AUT", "AUT", "GER", "GER", "GER", "GER", "GER"), value=c(NA, 5, NA, NA, NA, NA, 7, NA, NA))
Run Code Online (Sandbox Code Playgroud)
现在,我想使用最后一次观察结果(LOCF)替换每个国家子集中的NA值.我知道命令na.locf
在动物园包.data <- na.locf(data)
会给我以下数据框:
country value
AUT NA
AUT 5
AUT 5
AUT 5
GER 5
GER 5
GER 7
GER 7
GER 7
Run Code Online (Sandbox Code Playgroud)
但是,该功能仅应用于按国家/地区划分的各个子集.以下是我需要的输出:
country value
AUT NA
AUT 5 …
Run Code Online (Sandbox Code Playgroud) 我有以下数据框:
Date,Year,Austria,Germany,...
1969-12-31,1969,96.743,95.768,...
1970-01-30,1970,95.515,95.091,...
1970-02-27,1970,95.075,95.235,...
Run Code Online (Sandbox Code Playgroud)
最后,我想将此数据框与另一个看起来像这样的数据框合并:
Year,Country,Exp,...
1969,Austria,1,...
1970,Austria,0,...
1969,Germany,0,...
1970,Germany,1,...
Run Code Online (Sandbox Code Playgroud)
我看到它的方式,我将不得不将第一个数据框更改为以下格式:
Date,Year,Country,Exp,…
1969-12-31,1969,Austria,96.743,...
1970-01-30,1970,Austria,95.515,...
1970-02-27,1970,Austria,95.075,...
1969-12-31,1969,Germany,95.768,...
1970-01-30,1970,Germany,95.091,...
1970-02-27,1970,Germany,95.235,...
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用合并功能并使用年份和国家合并它们(一对多).
我试图按照上面的建议转换数据框.但是,我能想到的唯一方法是使用一些复杂的"for"循环.如果有人采用更简单的方法,我们将不胜感激.此外,如果您认为合并这两个数据帧可以以更容易的方式完成,这也很好.
我有以下数据集,我想从宽到长格式重塑:
Name Code CURRENCY 01/01/1980 02/01/1980 03/01/1980 04/01/1980
Abengoa 4256 USD 1.53 1.54 1.51 1.52
Adidas 6783 USD 0.23 0.54 0.61 0.62
Run Code Online (Sandbox Code Playgroud)
这些数据包括1980年至2013年每天不同公司的股票价格.因此,我的广泛数据中有8,612列(和3,000行).现在,我使用以下命令将数据重新整形为长格式:
library(reshape)
data <- read.csv("data.csv")
data1 <- melt(data,id=c("Name","Code", "CURRENCY"),variable_name="Date")
Run Code Online (Sandbox Code Playgroud)
但是,对于大约50MB的.csv文件,它已经需要大约两个小时.计算时间不应该由弱硬件驱动,因为我在具有16GB RAM的2.7 GHz Intel Core i7上运行.有没有其他更有效的方法来做到这一点?
非常感谢!