如何在R语言的for循环中对DataFrame执行if判断
R语言使用for循环统计分组满足条件的次数
1. 先构造对应的数据框
把你提供的简化数据转换成R的DataFrame格式:
df <- data.frame( tag = c(1273, 1273, 1273, 1275, 1275, 1278, 1278), dist = c(1002, 3212, 1252, 2152, 232, 582, 752) )
2. 提取唯一的tag值
先拿到所有不重复的tag,确保每个tag只被统计一次:
unique_tags <- unique(df$tag)
3. 初始化结果存储容器
创建一个整数向量,长度和唯一tag的数量一致,用来存每个tag对应的统计次数,同时给向量命名方便对应:
amount <- integer(length(unique_tags)) names(amount) <- unique_tags
4. 编写for循环完成统计
R的for循环逻辑和Python类似,这里用seq_along()遍历索引(等价于Python的range(len())),循环内完成筛选和计数:
for (i in seq_along(unique_tags)) { # 筛选当前tag对应的所有dist值 current_dist <- df$dist[df$tag == unique_tags[i]] # R中逻辑值TRUE/FALSE会被自动转为1/0,sum求和就是满足条件的次数 amount[i] <- sum(current_dist > 1000) }
5. 输出指定格式的结果
用cat()函数按照你需要的格式打印结果:
cat("tag: ", paste(unique_tags, collapse = " "), "\n\n") cat("amount: ", paste(amount, collapse = " "), "\n")
运行后会得到你要的输出:
tag: 1273 1275 1278 amount: 3 1 0
额外补充(非必须)
R更推荐向量化操作,处理50k行数据时效率更高,比如用aggregate()一行完成统计:
aggregate(dist ~ tag, data = df, FUN = function(x) sum(x > 1000))
但如果你明确需要用for循环,上面的循环写法逻辑清晰,和Python循环思路一致,容易上手。
内容的提问来源于stack exchange,提问作者SanderOhm
相关产品推荐
相关产品推荐

