You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在数据框中使用mapply实现间接寻址的方法问询

用mapply实现数据框索引匹配新增列

没问题,这就帮你搞定这个需求!先理清楚你的场景:

原始数据框

d1
keystr keynum
1 abc 5
2 def 2
3 def 7
4 abc 3

d2
HD 2 3 5 7
1 abc H I J K
2 def L M N P

预期结果

d1
keystr keynum val
1 abc 5 J
2 def 2 L
3 def 7 P
4 abc 3 I

解决方案代码

核心思路是利用mapply遍历d1的每一对keystr和keynum,同时把d2的行名设置为HD列的值,方便直接用字符串索引行,代码如下:

# 将d2的行名设置为HD列的内容,便于通过keystr定位行
rownames(d2) <- d2$HD

# 使用mapply遍历keystr和keynum,提取对应单元格的值
d1$val <- mapply(function(k_str, k_num) {
  # 把keynum转为字符,匹配d2的列名(列名是字符类型的"2""3"等)
  d2[k_str, as.character(k_num)]
}, d1$keystr, d1$keynum)

代码说明

  • 第一步给d2设置行名,这样我们可以直接用d1$keystr里的abc/def作为行索引,不用再额外查找行位置;
  • mapply会逐个取出d1$keystr和d1$keynum的元素对,传给匿名函数:把数字类型的keynum转为字符(因为d2的列名是字符串格式),然后从d2中提取对应行和列的单元格值;
  • 最终所有提取出的值会被组合成一个向量,赋值给d1$val,就能得到你想要的结果啦。

内容的提问来源于stack exchange,提问作者Vrokipal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:12:35