【发布时间】:2018-06-21 08:40:31
【问题描述】:
我有一个这样的数据框
ID 07 08 09 10 year balance
abc 0 0 0 0 09 2123.00
efg 0 0 0 0 09 780.4
xyz 0 0 0 0 07 2402.9
prq 0 0 0 0 10 123.3
mno 0 0 0 0 07 679
我需要根据“year”列和balance中的值填写07、08、09和10列。 对于每个 ID,对应列年份中的值的列填充余额中的值。逐行应用。
例如,对于第 1 行,年份是 09,因此该 ID 的第 09 列用值 2123.00 填充。其余年份值保持为 0。
对于第 3 行,值 24502.9 填充到第 07 列,因为它的年份值是 07。以此类推..
我的输出应该是这样的
ID 07 08 09 10 year balance
abc 0 0 2123.00 0 09 2123.00
efg 0 0 780.4 0 09 780.4
xyz 2402.9 0 0 0 07 2402.9
prq 0 0 0 123.3 10 123.3
mno 679 0 0 0 07 679
PS:我已经为此编写了一个 for 循环。我需要比 for 循环更快的东西。我实际上正在处理成千上万的数据。 我不知道是否有类似 apply 的东西返回一个数据框
【问题讨论】:
-
也许输入你的数据框?
-
您可以使用 ID、年份、data.frame 的余额列和
dcast它使用reshape2和data.table以 ID 作为列中的行和年份,并在值中使用余额library(reshape2) library(data.table) final_output<-dcast(setDT(df),ID~year, value.vars="balance") -
@SatZ 这似乎确实有效。请把它写成答案
-
如果我投的是年份,年份会按升序排列吗?我需要这样
-
@DomJo 我已将其添加为答案以及重新排序