如何在R中的for循环中在数据帧上运行if语句



我有一个问题,我在这里找不到解决方案。我有一个数据帧,非常简化,看起来像这样(实际上是50k x 12(:

tag:   1273 1273 1273  1275  1275 1278  1278
dist:
1002
3212
1252
2152
232
582
752

我需要一个for循环,它基本上打印出一个数字大于1000的次数。所以我最好得到一个向量,上面写着

tag:  1273 1275 1278
amount:   3  1  0

我以前没有在R中使用过循环,只有python,所以我们非常感谢您的帮助。

这里有一个使用dplyr包中函数的解决方案:

library(dplyr)
df <- data.frame(tags = c(1273,1273,1273,1275,1275,1278,1278),
dist = c(1002,3212,1252,2152,232,582,752))
df %>%
group_by(tags) %>%
tally(dist > 1000, name = "amount") 
#> # A tibble: 3 × 2
#>    tags amount
#>   <dbl>  <int>
#> 1  1273      3
#> 2  1275      1
#> 3  1278      0
# output as a vector
df %>%
group_by(tags) %>%
tally(dist > 1000, name = "amount") %>%
pull(amount, tags)
#> 1273 1275 1278 
#>    3    1    0

创建于2022-09-05由reprex包(v2.0.1(

我认为您可以尝试使用sum功能的tapply

> tapply(dist > 1000, tag, sum)
1273 1275 1278
3    1    0

table

> table(dist > 1000, tag)[2, ]
1273 1275 1278
3    1    0

数据

tag <- c(1273, 1273, 1273, 1275, 1275, 1278, 1278)
dist <- c(1002, 3212, 1252, 2152, 232, 582, 752)

最新更新