我正在使用tidyverse对房价数据进行一些分析。我有房价随着时间的推移,我想创建新的列,通过应用一个向量的首付,以输出一个新的栏目为每个首付百分比。
set.seed(100)
dates <- seq.Date(from = as.Date('2010-01-01'), to = as.Date('2010-12-01'), by = 'months')
prices <- rnorm(12, mean = 100000, sd = 5000)
home_vals <- data.frame(dates, prices)
out <- home_vals %>%
mutate(
DownPayment_20 = 0.2 * prices
,DownPayment_10 = 0.1 * prices
,DownPayment_5 = 0.05 * prices
)
head(out)
dates prices DownPayment_20 DownPayment_10 DownPayment_5
1 2010-01-01 97489.04 19497.81 9748.904 4874.452
2 2010-02-01 100657.66 20131.53 10065.766 5032.883
3 2010-03-01 99605.41 19921.08 9960.541 4980.271
4 2010-04-01 104433.92 20886.78 10443.392 5221.696
5 2010-05-01 100584.86 20116.97 10058.486 5029.243
6 2010-06-01 101593.15 20318.63 10159.315 5079.658我想通过传递像down_payments <- c(0.2, 0.1, 0.05)这样的向量,对任何数量的首付款输入都能做到这一点,但是,如果不手动修改每一列,我就无法找到一种简单的方法来做到这一点。此外,我可能想包括其他向量的输入,并使用首付向量和新向量在某些计算,并有一个新的列为该数额。
谢谢!
发布于 2022-07-01 01:18:01
在Base中使用outer函数或简单的%o%
cbind(home_vals, home_vals$prices %o% setNames(downs, paste0('DownPayment_', downs)))
dates prices DownPayment_0.2 DownPayment_0.1 DownPayment_0.05
1 2010-01-01 97489.04 19497.81 9748.904 4874.452
2 2010-02-01 100657.66 20131.53 10065.766 5032.883
3 2010-03-01 99605.41 19921.08 9960.541 4980.271
4 2010-04-01 104433.92 20886.78 10443.392 5221.696
5 2010-05-01 100584.86 20116.97 10058.486 5029.243
6 2010-06-01 101593.15 20318.63 10159.315 5079.658
7 2010-07-01 97091.05 19418.21 9709.105 4854.552
8 2010-08-01 103572.66 20714.53 10357.266 5178.633
9 2010-09-01 95873.70 19174.74 9587.370 4793.685
10 2010-10-01 98200.69 19640.14 9820.069 4910.034
11 2010-11-01 100449.43 20089.89 10044.943 5022.472
12 2010-12-01 100481.37 20096.27 10048.137 5024.069发布于 2022-07-01 00:18:30
用data.table
library(data.table)
setDT(home_vals)
home_vals[,(paste0("DownPayment_",down_payments*100)):=lapply(down_payments,\(x) x*prices)][]
dates prices DownPayment_20 DownPayment_10 DownPayment_5
<Date> <num> <num> <num> <num>
1: 2010-01-01 97489.04 19497.81 9748.904 4874.452
2: 2010-02-01 100657.66 20131.53 10065.766 5032.883
3: 2010-03-01 99605.41 19921.08 9960.541 4980.271
4: 2010-04-01 104433.92 20886.78 10443.392 5221.696
5: 2010-05-01 100584.86 20116.97 10058.486 5029.243
6: 2010-06-01 101593.15 20318.63 10159.315 5079.658
7: 2010-07-01 97091.05 19418.21 9709.105 4854.552
8: 2010-08-01 103572.66 20714.53 10357.266 5178.633
9: 2010-09-01 95873.70 19174.74 9587.370 4793.685
10: 2010-10-01 98200.69 19640.14 9820.069 4910.034
11: 2010-11-01 100449.43 20089.89 10044.943 5022.472
12: 2010-12-01 100481.37 20096.27 10048.137 5024.069https://stackoverflow.com/questions/72823121
复制相似问题