【发布时间】:2021-11-19 23:35:53
【问题描述】:
我现在有非常乏味的代码,我想对其进行压缩,以提高效率并减少人为错误。现在我有一个数据集:
month <- rep(c(1:9), times = 10)
age <- rep(c(1:5), times = 18)
period <- rep(c(1:3))
value_1 <- rep(c(0.1, 0.3, 0.4, 0.7, 0.9), times = 9)
df <- data.frame(period, month, age, value_1)
我当前的代码如下所示:
period1_age1_month1<- c(ifelse(df$value_1[df$period==1 & df$month==1 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==1 & df$age==1]- 1), df$value_1[df$period==1 & df$month==1 & df$age==1]+ 1)
period1_age1_month2<- c(ifelse(df$value_1[df$period==1 & df$month==2 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==2 & df$age==1]- 1), df$value_1[df$period==1 & df$month==2 & df$age==1]+ 1)
period1_age1_month3<- c(ifelse(df$value_1[df$period==1 & df$month==3 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==3 & df$age==1]- 1), df$value_1[df$period==1 & df$month==3 & df$age==1]+ 1)
period1_age1_month4<- c(ifelse(df$value_1[df$period==1 & df$month==4 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==4 & df$age==1]- 1), df$value_1[df$period==1 & df$month==4 & df$age==1]+ 1)
period1_age1_month5<- c(ifelse(df$value_1[df$period==1 & df$month==5 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==5 & df$age==1]- 1), df$value_1[df$period==1 & df$month==5 & df$age==1]+ 1)
period1_age1_month6<- c(ifelse(df$value_1[df$period==1 & df$month==6 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==6 & df$age==1]- 1), df$value_1[df$period==1 & df$month==6 & df$age==1]+ 1)
period1_age1_month7<- c(ifelse(df$value_1[df$period==1 & df$month==7 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==7 & df$age==1]- 1), df$value_1[df$period==1 & df$month==7 & df$age==1]+ 1)
period1_age1_month8<- c(ifelse(df$value_1[df$period==1 & df$month==8 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==8 & df$age==1]- 1), df$value_1[df$period==1 & df$month==8 & df$age==1]+ 1)
period1_age1_month9<- c(ifelse(df$value_1[df$period==1 & df$month==9 & df$age==1]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==9 & df$age==1]- 1), df$value_1[df$period==1 & df$month==9 & df$age==1]+ 1)
period1_age2_month1<- c(ifelse(df$value_1[df$period==1 & df$month==1 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==1 & df$age==2]- 1), df$value_1[df$period==1 & df$month==1 & df$age==2]+ 1)
period1_age2_month2<- c(ifelse(df$value_1[df$period==1 & df$month==2 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==2 & df$age==2]- 1), df$value_1[df$period==1 & df$month==2 & df$age==2]+ 1)
period1_age2_month3<- c(ifelse(df$value_1[df$period==1 & df$month==3 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==3 & df$age==2]- 1), df$value_1[df$period==1 & df$month==3 & df$age==2]+ 1)
period1_age2_month4<- c(ifelse(df$value_1[df$period==1 & df$month==4 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==4 & df$age==2]- 1), df$value_1[df$period==1 & df$month==4 & df$age==2]+ 1)
period1_age2_month5<- c(ifelse(df$value_1[df$period==1 & df$month==5 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==5 & df$age==2]- 1), df$value_1[df$period==1 & df$month==5 & df$age==2]+ 1)
period1_age2_month6<- c(ifelse(df$value_1[df$period==1 & df$month==6 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==6 & df$age==2]- 1), df$value_1[df$period==1 & df$month==6 & df$age==2]+ 1)
period1_age2_month7<- c(ifelse(df$value_1[df$period==1 & df$month==7 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==7 & df$age==2]- 1), df$value_1[df$period==1 & df$month==7 & df$age==2]+ 1)
period1_age2_month8<- c(ifelse(df$value_1[df$period==1 & df$month==8 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==8 & df$age==2]- 1), df$value_1[df$period==1 & df$month==8 & df$age==2]+ 1)
period1_age2_month9<- c(ifelse(df$value_1[df$period==1 & df$month==9 & df$age==2]- 1 <= 0, 0, df$value_1[df$period==1 & df$month==9 & df$age==2]- 1), df$value_1[df$period==1 & df$month==9 & df$age==2]+ 1)
但是,它会针对每个年龄组进行,然后一旦代表每个年龄组,它就会在每个时期重复。每周,我都会收到一个新时期的新数据集,然后我必须返回并添加新时期(4,然后 5,然后 6),这使得代码非常长并且更新也很耗时。代码长达数百行。我现在可以更轻松地使用此代码并使其自动化而不是复制和粘贴,而是替换每个时期/年龄。
我对 R 很陌生,没有任何自动化经验。我希望有人能指出我正确的方向。循环、矢量化或应用似乎都是可行的方法。但是,我不知道如何开始。如果有人对此有任何见解,我将非常感谢任何帮助。
非常感谢!
【问题讨论】:
-
另外请分享一个您预期结果的示例,即目前您存储了很多向量。您希望将结果作为新列附加到您的数据中吗?
-
现在的输出存储了许多(数百个)向量,但我不希望它是这样的。我认为向数据框中添加两个新列更有意义,并且更容易使用!非常感谢你的回复!感谢您的帮助和耐心。
-
我认为如果您分享
dfshared 的预期输出,您的目标会更容易理解。
标签: r loops automation vectorization apply