如何在R语言中提取大括号内的整数并新增布尔变量?
解决方法:提取集合并判断元素存在性
没问题,我来帮你搞定这个需求!我们可以拆成两个核心步骤:先把activity_ids字段里大括号包裹的整数提取出来,再新增一个布尔变量来判断每行的activity_id是否属于这个整数集合。下面我用两种常用的数据分析工具来演示,你按需选用:
用R语言处理
步骤1:提取大括号内的整数集合
我们可以用字符串处理工具去掉activity_ids里的大括号,再把分割后的字符转成整数向量:
# 先构造示例数据框 act <- data.frame( activity_id = c(227, 32, 33, 34, 35, 252, 227, 32, 33, 34), activity_ids = rep("{227,32,33,34,35,252}", 10), stringsAsFactors = FALSE ) # 加载tidyverse工具包(也可以用base R实现) library(tidyverse) # 提取整数集合,保存为列表列 act <- act %>% mutate( id_collection = str_remove_all(activity_ids, "[{}]") %>% # 去掉大括号 str_split(",") %>% # 按逗号分割成字符向量 map(as.integer) # 把每个字符向量转成整数向量 )
步骤2:新增布尔变量判断存在性
用map2_lgl函数逐行判断activity_id是否在对应的整数集合中:
act <- act %>% mutate( is_in_collection = map2_lgl(activity_id, id_collection, ~ .x %in% .y) )
运行后,act数据框会新增id_collection(存储每行的整数集合)和is_in_collection(布尔值,标记是否存在)两列。
用Python Pandas处理
步骤1:提取大括号内的整数集合
通过字符串替换和拆分,把大括号里的内容转成整数列表:
import pandas as pd # 构造示例数据框 data = { "activity_id": [227, 32, 33, 34, 35, 252, 227, 32, 33, 34], "activity_ids": ["{227,32,33,34,35,252}"] * 10 } act = pd.DataFrame(data) # 提取整数集合,生成列表列 act["id_collection"] = act["activity_ids"].str.replace(r"[{}]", "", regex=True) \ .str.split(",") \ .apply(lambda x: [int(num) for num in x])
步骤2:新增布尔变量判断存在性
用apply函数逐行判断元素是否在集合中:
act["is_in_collection"] = act.apply(lambda row: row["activity_id"] in row["id_collection"], axis=1)
这样处理后,你就能得到包含判断结果的布尔变量啦,示例里所有行的is_in_collection都会是True,因为每个activity_id都在对应的集合里。
内容的提问来源于stack exchange,提问作者Mohamad Sahil
相关产品推荐
相关产品推荐

