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

如何基于指定扩展数据框在R语言中创建类Python格式的映射字典

在R中创建类似Python格式的映射字典

我有如下生成数据框的R代码:

data=data.frame(v1=c("traf","hayr", "poaz", "adfv", "srta"))
dup=rep(2,nrow(data))
id=rep(1:nrow(data), dup)
dupdf=data[id,]
dupdf2=as.data.frame(dupdf)
df=dupdf2 %>% mutate(col1 = if_else(row_number() %% 2 == 0, paste(dupdf, "_var"), dupdf)) %>%select(-dupdf)

运行后得到的df如下:

col1
1   traf
2 traf _var
3   hayr
4 hayr _var
5   poaz
6 poaz _var
7   adfv
8 adfv _var
9   srta
10 srta _var

我希望在R语言中创建一个类似Python格式的字典(键值对映射),Python示例如下:

{'traf':1, 'traf _var':1, 'hayr':2, 'hayr _var':2, 'poaz':3, 'poaz _var':3, 'adfv':4, 'adfv _var':4, 'srta':5, 'srta _var':5}

我知道用列表是实现需求的最佳方式,但不清楚具体操作步骤。我的真实数据包含130行(对应65个不同的唯一值),希望得到帮助。


解决方案

在R里,命名向量是最接近Python字典的结构,同样支持通过键快速查找对应值,下面提供两种高效的实现方法:

方法1:基于现有df生成映射

因为你的数据是每2行对应一个原始组,我们可以用整数除法生成对应的组编号,再转换成命名向量:

library(dplyr)

# 生成映射命名向量
name_map <- df %>%
  mutate(group_id = (row_number() + 1) %/% 2) %>%  # 每2行一组,生成1,1,2,2...的ID
  select(col1, group_id) %>%
  tibble::deframe()  # 将两列转换为"键-值"形式的命名向量

# 查看结果
name_map

运行后会得到如下输出:

traf traf _var    hayr hayr _var    poaz poaz _var    adfv adfv _var    srta srta _var 
      1        1        2        2        3        3        4        4        5        5 

如果需要转换成类似Python字典的列表格式查看,只需用as.list(name_map):

as.list(name_map)

输出示例:

$traf
[1] 1

$`traf _var`
[1] 1

$hayr
[1] 2

$`hayr _var`
[1] 2

# 其余键值对省略

方法2:从原始data直接构建映射

如果你还保留着原始的data数据框,直接从源数据构建会更高效,不需要依赖生成后的df:

# 生成所有需要的键(原始值 + 带_var的后缀值)
keys <- c(data$v1, paste(data$v1, "_var"))
# 生成对应的组ID(每个原始值的ID重复两次)
values <- rep(1:nrow(data), each = 2)
# 创建命名向量
name_map <- setNames(values, keys)

这个方法对于130行的数据集来说完全没有性能问题,运行速度更快。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:44:12