我在R中生成以下虚拟变量时遇到了麻烦。
我正在分析每年的时间序列数据(时间段为1948-2009)。我有两个问题。
1.我如何为观察值#10,即1957年生成一个虚拟变量(1957年的值=1,否则为0)?
2.2.如何生成一个虚拟变量,在1957年之前为零,从1957年开始到2009年取值为1?
如果你有很多变量,另一个可以更好地工作的选项是因子和模型.矩阵。
因子
模型.矩阵
> year.f = factor(year) > dummies = model.matrix(~year.f)
这将包括一个截距列(所有的1)和你的数据集中每个年份的一列,除了一个,这将是"默认"或截距值。
你可以通过修改model.matrix中的contrasts.arg来改变如何选择"default"。
model.matrix
contrasts.arg
另外,如果你想省略截距,你可以放弃第一列或者在公式的末尾添加+0。
+0
希望这很有用。
产生这些虚拟变量的最简单的方法是类似以下的方法。
> print(year) [1] 1956 1957 1957 1958 1958 1959 > dummy print(dummy) [1] 0 1 1 0 0 0 > dummy2 = 1957) > print(dummy2) [1] 0 1 1 1 1 1
更一般地说,你可以使用 "ifelse "来根据条件在两个值之间进行选择。因此,如果出于某种原因,你想使用0-1的虚拟变量,例如4和7,你可以使用ifelse(year == 1957, 4, 7)。
ifelse(year == 1957, 4, 7)
我通常在处理这种虚拟变量时的做法是。
(1)我如何为观察值#10,即1957年生成一个虚拟变量(1957年的值=1,否则为0)。
data$factor_year_1
如果你有很多变量,另一个可以更好地工作的选项是
因子
和模型.矩阵
。这将包括一个截距列(所有的1)和你的数据集中每个年份的一列,除了一个,这将是"默认"或截距值。
你可以通过修改
model.matrix
中的contrasts.arg
来改变如何选择"default"。另外,如果你想省略截距,你可以放弃第一列或者在公式的末尾添加
+0
。希望这很有用。
产生这些虚拟变量的最简单的方法是类似以下的方法。
更一般地说,你可以使用 "ifelse "来根据条件在两个值之间进行选择。因此,如果出于某种原因,你想使用0-1的虚拟变量,例如4和7,你可以使用
ifelse(year == 1957, 4, 7)
。我通常在处理这种虚拟变量时的做法是。
(1)我如何为观察值#10,即1957年生成一个虚拟变量(1957年的值=1,否则为0)。