首页 > 解决方案 > 翻译Stata循环

问题描述

我想将以下 Stata 循环转换为 R:

foreach day of numlist 1/7 {;
replace dywt = 1/7 * 1/Freq[`day',1] if interview_day==`day';
}

数据(R 输出):

> INTERVIEW_DAY[1:15]
 [1] 5 6 6 4 4 4 1 2 6 4 6 7 6 3 6

> Freq
[1] 0.14353969 0.14795762 0.14089618 0.14074198 0.14194271 0.14295769 0.14196413

> F
[1] 20720

> DYWT[1:15]
 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

先感谢您。

标签: rloopsstatatranslate

解决方案


R中,如果它们都是vectors,那么等价的方法是NA 通过为“INTERVIEW_DAY”的每个序列值获取相应的“Freq”来替换向量(“DYWT”)(Freq[INTERVIEW_DAY]-INTERVIEW_DAY是一个数字向量序列,可以是用作 'Freq' 的位置向量),除以 1,然后乘以1/max(INTERVIEW_DAY)

DYWT <- 1/max(INTERVIEW_DAY) * 1/Freq[INTERVIEW_DAY]

或者如果它是基于唯一元素的数量,它也可以是

DYWT <- 1/length(unique(INTERVIEW_DAY)) * 1/Freq[INTERVIEW_DAY]

或者它是“INTERVIEW_DAY”1/77唯一元素的数量(如果缺少某些索引,那么最好使用1/7

数据

INTERVIEW_DAY <- scan(text = '5 6 6 4 4 4 1 2 6 4 6 7 6 3 6', what = integer())
Freq <- scan(text = '0.14353969 0.14795762 0.14089618 0.14074198 0.14194271 0.14295769 0.14196413', what = numeric())

推荐阅读