如何在R语言apply函数内获取数据框的行索引?
在R语言apply函数内获取行索引的方法
你给出的写法不可行。当apply(df, MARGIN=1)按行处理时,每一行会被转换成一个向量,而向量没有行索引属性,row(x)作用在向量上无法返回原数据框的行号,只会得到无意义的结果。
下面是几种可行的实现方式:
方法1:给apply传递行索引参数
手动生成行号序列,作为额外参数传入自定义函数:
apply(df, MARGIN=1, FUN=function(x, idx) { numrow <- idx # 这里可以添加你的其他处理逻辑 }, idx = seq_len(nrow(df)))
方法2:使用mapply遍历行与索引
通过split把数据框拆成行列表,再和行号序列配对遍历:
mapply(function(row_data, idx) { numrow <- idx # 处理逻辑 }, split(df, seq(nrow(df))), seq_len(nrow(df)))
方法3:tidyverse生态下的rowwise+cur_row_number
如果习惯使用dplyr,可以用rowwise()分组后直接获取行号:
library(dplyr) df %>% rowwise() %>% mutate( numrow = cur_row_number(), # 这里添加每行的处理逻辑,比如计算某值 processed_value = sum(c_across(everything())) ) %>% ungroup()
内容的提问来源于stack exchange,提问作者Kaikus
相关产品推荐
相关产品推荐

