您能帮我理解下面的代码吗?我理解它的第一行。它会创建一系列1,直到数据集中的行数。我没有得到第二行代码的含义。
weight <- rep(1, nrow(dataTraining))
weight[dataTraining$SeriousDlqin2yrs == 0] <- 0.1
SeriousDlqin2yrs
是目标变量。
答案 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
。由于weight
与dataTraining
匹配,我们可以基于weight
以类似的方式对SeriousDlqin2yrs
进行分组。我们想要的条件是SeriousDlqin2yrs == 0
。
让我们并排查看weight
和SeriousDlqin2yrs
,并标记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