【问题标题】:R: Subset data using for-loop [duplicate]R:使用for循环的子集数据[重复]
【发布时间】: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 您将问题标记为重复问题,我现在删除问题是否常见?

标签: r loops for-loop subset


【解决方案1】:

不!

这不是它在 R 中的工作方式。;) 您希望使用 矢量化 代码,因为它更简洁和更快(在 R 中)。这里有两种解决方案:

df = subset(CBS, `Wijken en buurten` %in% c("Oud-Overdie", "Overdie-West", "Overdie-Oost", "Oosterhout", "De Hoef III en IV"))

df = CBS[CBS$`Wijken en buurten` %in% c("Oud-Overdie", "Overdie-West", "Overdie-Oost", "Oosterhout", "De Hoef III en IV"),]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多