【发布时间】:2018-03-26 08:32:41
【问题描述】:
我有一个包含社区的大数据集,但我只想要这些社区的一个子集,我有一个字符向量。 我考虑过使用 for 循环对其进行子集化,请参阅下面的数据示例和代码示例。看起来我的 for 循环实际上是遍历所有社区 - 但是 - 在我的新数据集中,只出现一个社区,而不是所有社区的子集。谁能告诉我我在代码中做错了什么?
我受到所有这些答案的启发: How to subset the dataframe byusing for loop and if condition in r
subset data frame in R using loop
R: loop through data frame extracting subset of data depending on date
最好的。谢谢。
示例数据
大数据集:
> head(CBS, n=5)
# A tibble: 5 x 37
`Wijken en buurten` `Aantal inwoners` `||Mannen` `||Vrouwen`
<chr> <dbl> <dbl> <dbl>
1 Alkmaar 108373 53659 54714
2 Zuid 14315 6785 7525
3 Kooimeer 2040 930 1105
4 Dillenburg en Stadhouderskwartier 1310 605 700
5 Staatsliedenkwartier en Landstraten 2130 1015 1110
但我只需要这些社区的信息:
> head(buurten_2, n=5)
buurten_2
[1,] "Oud-Overdie"
[2,] "Overdie-West"
[3,] "Overdie-Oost"
[4,] "Oosterhout"
[5,] "De Hoef III en IV"
这些对应于 CBS 的“Wijken en Buurten”列中的变量名称。
这些是我尝试过的循环:(其中一些我知道它不会工作,但我很绝望......)
for (i in 1:nrow(buurten_2)){
if (CBS$`Wijken en buurten`[i] == buurten_2[i])
data <- append(data, CBS[i,])
print(buurten_2[i])
}
for (i in 1:length(buurten_2)){
temp <- CBS[CBS$`Wijken en buurten`==buurten_2[i],]
print(buurten_2[i])
}
for (i in 1:length(buurten_2)){
data <- subset(CBS, CBS$`Wijken en buurten` == buurten_2[i])
print(buurten_2[i])
}
for (buurten in 1:nrow(buurten_2)){
CBS %>%
filter(CBS$`Wijken en buurten`[i] == buurten_2[buurten])
}
编辑
但这给了我这个
# A tibble: 1 x 37
`Wijken en buurten` `Aantal inwoners` `||Mannen` `||Vrouwen` `|||Ongehuwd` `||Gehuwd`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Oudorp-Centrum 1930 935 995 730 940
【问题讨论】:
-
为什么要使用循环?为什么不
CBS[CBS$`Wijken en buurten` %in% buurten_2,]? -
@DavidArenburg 我使用了一个循环,因为我认为我需要一个。显然我不这样做,因为这行得通!你能解释一下 %in% 的作用吗?
-
它基本上检查
CBS$`Wijken en buurten`中的每个值是否可以匹配buurten_2中的任何值并返回一个布尔向量。作为一般规则,您很少需要在 R 中使用循环。 -
啊哈...我仍在不断提高我的编码技能,这证明了这一点!谢谢你的解释! :) @DavidArenburg
-
@DavidArenburg 您将问题标记为重复问题,我现在删除问题是否常见?