【问题标题】:For loops are for beginners - how does it work better in R? [closed]For 循环适用于初学者 - 它如何在 R 中更好地工作? [关闭]
【发布时间】:2021-02-14 09:22:14
【问题描述】:

我有一个包含大约 75,000 个观察值的数据集,我想在第一步中稍微准备一下。

比如我想在某个条件下设置一个变量。

我现在的经典方法是逐行迭代整个数据集。检查每一行的条件,然后设置变量。

这是正确的方法吗?尤其是在计算时间方面?

初始数据

for (row in 1:nrow(kader_test)) {
  if (kader_test[row,]$saison <= kader_test[row,]$jahr_im_team_seit) {
    kader_test[row,]$gespielt_von = kader_test[row,]$im_team_seit
  }
}

Nach der FOR Schleife sieht man, dass sich in Zeile 1 und 6 etwas geändert hat。 Gibt es hierfür einen Eleganteren Weg?

结果

谢谢。

【问题讨论】:

  • 嗨 edstrinova。你还没有向我们展示你的数据。您已经展示了您的数据的图片,我们无法使用这些图片来测试解决方案。您能否使用 dput(kader_test[1:11,]) 的结果编辑您的问题?谢谢
  • 这可以使用baseR => cond&lt;-kader_test$saison &lt;= kader_test$jahr_im_team_seit kader_test$gespielt_von[cond] = kader_test$im_team_seit[cond]来实现
  • 您可能需要在比较时更加小心。您可以提取 im_team_seit 的年份部分并进行数字比较,saison 变量设为日期(不确定这是否应该是一年中最后一天的第一天.. .)

标签: r loops cpu-time


【解决方案1】:

我想一个好的解决方案是 dplyr 包:

library(dplyr)

kader_test %>%
  dplyr::mutate(gespielt_von = ifelse(saison <= jahr_im_team_seit, im_team_seit, NA))

【讨论】:

    【解决方案2】:

    由于 R 是矢量化的,您可以使用简单的基本 R ifelse 语句。

    kader_test$gespielt_von <- ifelse(kader_test$saison <= kader_test$jahr_im_team_seit, kader_test$im_team_seit, NA)
    

    【讨论】:

      【解决方案3】:

      抱歉,我没有显示数据。下次我会做得更好。

      首先,感谢您的回答,实际上效果很好。计算在几毫秒内完成。

      现在我还有一些障碍。我们走吧:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多