如何计算两个数据框列表中首次出现"A"的索引差值?
计算两个列表对应向量中首次"A"的索引差值
问题回顾
你有两个字符向量列表lst1和lst2,需要对列表中名称对应的元素,计算lst1元素里首次出现"A"的索引减去lst2对应元素里首次出现"A"的索引。示例中:
lst1$4首次"A"的索引是4,lst2$4首次"A"的索引是3,差值为1lst1$7和lst2$7均无"A",这类情况可返回NA(或按需调整)
实现代码
首先定义一个函数,用于提取单个向量中首次"A"的索引:
get_first_A_index <- function(vec) { # 找到所有"A"的位置,取第一个;无"A"则返回NA idx <- which(vec == "A")[1] if (is.na(idx)) return(NA) idx }
然后用mapply遍历两个列表的对应元素,计算差值:
# 构造示例中的测试列表 lst1 <- list( `4` = c("N", "N", "N", "A", "A", "A", "A", "N"), `7` = c(rep("N", 8)) ) lst2 <- list( `4` = c("N", "N", "A", "A", "A", "A", "A", "N", "N", "N"), `7` = c(rep("N", 10)) ) # 计算索引差值 index_diff <- mapply(function(x, y) { get_first_A_index(x) - get_first_A_index(y) }, lst1, lst2) # 查看结果 index_diff
结果说明
运行上述代码后,输出结果为:
4 7 1 NA
其中4对应的差值是1,符合示例预期;7因无"A",返回NA。如果需要将无"A"的情况返回0,只需修改get_first_A_index函数,把return(NA)改成return(0)即可。
内容的提问来源于stack exchange,提问作者pkha
相关产品推荐
相关产品推荐

