R rep功能用于权重

时间:2015-05-22 19:32:47

标签: r

您能帮我理解下面的代码吗?我理解它的第一行。它会创建一系列1,直到数据集中的行数。我没有得到第二行代码的含义。

weight <- rep(1, nrow(dataTraining))
weight[dataTraining$SeriousDlqin2yrs == 0] <- 0.1 

SeriousDlqin2yrs是目标变量。

2 个答案:

答案 0 :(得分:1)

第一行的内容是正确的。

假设您的训练数据有10行。我们来做一个快速模拟:

dataTraining <- data.frame(SeriousDlqin2yrs = sample(0:1, 10, replace = TRUE))

然后您的数据框如下所示:

dataTraining
#    SeriousDlqin2yrs
# 1                 0
# 2                 0
# 3                 0
# 4                 0
# 5                 0
# 6                 0
# 7                 1
# 8                 0
# 9                 1
# 10                0

我们nrow(dataTraining)等于10。

当你构造weight向量时,它会重复数字1,直到得到一个10元素向量。

weight <- rep(1, nrow(dataTraining))
weight
#[1] 1 1 1 1 1 1 1 1 1 1

weight向量与dataTraining对齐,因为它们具有相同数量的元素。

现在假设您想要更改SeriousDlqin2yrs等于0的观测值的权重。您可以根据另一个相同长度的向量对向量进行子集,如下所示:

vector1[<condition involving vector2>]

这将返回第一个向量的所有元素,其中第二个向量上的条件返回TRUE。由于weightdataTraining匹配,我们可以基于weight以类似的方式对SeriousDlqin2yrs进行分组。我们想要的条件是SeriousDlqin2yrs == 0

让我们并排查看weightSeriousDlqin2yrs,并标记SeriousDlqin2yrs == 0返回TRUE的地方。

#                   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# SeriousDlqin2yrs     0    0    0    0    0    0    1    0    1     0
# weight               1    1    1    1    1    1    1    1    1     1
#                      ^    ^    ^    ^    ^    ^    x    ^    x     ^

这里^表示它是真的,x表示它是假的。所以,如果我们这样做

weight[dataTraining$SeriousDlqin2yrs == 0]

我们得到weight的元素1,2,3,4,5,6,8和10。

大。这就是我们想要的。但现在我们想对这些价值给予新的重视。事实证明,就像告诉R将新权重分配给该子集一样容易。

weight[dataTraining$SeriousDlqin2yrs == 0] <- 0.1
weight
#[1] 0.1 0.1 0.1 0.1 0.1 0.1 1.0 0.1 1.0 0.1

请注意,元素1,2,3,4,5,6,8和10现在是0.1,而元素7和9仍然是1.这正是我们想要的!

总结,当SeriousDlqin2yrs等于0时,它将0.1的权重替换为0.1。

答案 1 :(得分:0)

第一行是创建一个1s的向量,它具有dataTraining中行数的长度。

第二行将同一向量中的值0.1分配给对应索引,其中dataTraining $ SeriousDlqin2yrs中的值等于0.

请记住,列本质上是数据框中的向量列表。表名和列名之间的$符号将该指定列视为普通旧向量。

示例......

SeriousDlqin2yrs <- rep(c(1, 0), 3)
> SeriousDlqin2yrs
[1] 1 0 1 0 1 0
> weight <- rep(1.0, 6)
> weight
[1] 1 1 1 1 1 1
> weight[SeriousDlqin2yrs == 0] <- 0.1
> weight
[1] 1.0 0.1 1.0 0.1 1.0 0.1