【发布时间】:2012-03-16 14:17:01
【问题描述】:
我有以下类型的数据集:
id;2011_01;2011_02;2011_03; ... ;2001_12
id01;NA;NA;123; ... ;NA
id02;188;NA;NA; ... ;NA
也就是说,每一行都是唯一的客户,每一列都描述了该客户过去 10 年的特征(每个月都有自己的列)。问题是我想将这 120 列数据框压缩成 10 列数据框,这是因为我知道几乎所有行(尽管月份本身可能会有所不同)每年都有 1 或 0 个观察值。
我已经完成了,当时一年,使用带有嵌套 if 子句的循环:
for(i in 1:nrow(input_data)) {
temp_row <- input_data[i,c("2011_01","2011_02","2011_03","2011_04","2011_05","2011_06","2011_07","2011_08","2011_09","2011_10","2011_11", "2011_12")]
loc2011 <- which(!is.na(temp_row))
if(length(loc2011 ) > 0) {
temp_row_2011[i,] <- temp_row[loc2011[1]] #pick the first observation if there are several
} else {
temp_row_2011[i,] <- NA
}
}
由于我的数据集非常大,并且我需要执行上述循环 10 次(每年一次),这需要太多时间。我知道在 R 中使用应用命令要好得多,因此我将非常感谢您对这项任务的帮助。我怎样才能把整个事情(包括不同年份)写得更好?
【问题讨论】: