如何统计满足多条件的数据框行数?for循环与if语句实现困惑
解决思路与代码实现
首先纠正你原代码的问题:你把函数定义放在了for循环内部,而且循环的迭代对象是数据框本身,这会导致循环遍历的是数据框的列而非行,属于逻辑错误。
以下是用基础语法实现的两种方案:
方案一:直接用for循环+if判断
- 先初始化一个计数器,用来统计符合条件的行数:
count <- 0
- 遍历数据框的每一行(行号范围是1到数据框总行数
nrow(conditions)):
for (i in 1:nrow(conditions)) { # 取出第i行的所有数据,计算该行中1的总数 row_total <- sum(conditions[i, ]) # 判断是否满足2个及以上条件为1,满足则计数器加1 if (row_total > 1) { count <- count + 1 } }
- 最后输出统计结果:
count
方案二:先定义判断函数,再循环调用
如果想保留函数的写法,可以先定义一个判断单行是否符合条件的函数,再在循环中调用:
# 定义函数:输入一行数据,返回该行是否满足"2个及以上条件为1" check_multiple <- function(row_data) { row_sum <- sum(row_data) return(row_sum > 1) } # 初始化计数器 count <- 0 # 逐行循环判断,符合条件则累加计数 for (i in 1:nrow(conditions)) { if (check_multiple(conditions[i, ])) { count <- count + 1 } } # 输出统计结果 count
关键说明
conditions[i, ]用于提取数据框的第i行所有列的数据sum()函数对每行的0和1求和,得到该行存在的病症数量- 通过if判断和计数器累加,最终得到符合要求的总行数
内容的提问来源于stack exchange,提问作者Nicholas Rios
相关产品推荐
相关产品推荐

