我有这样的数据框
situations <- c("{17: '', 80: '', 55: '693', 29: '', 103: '19', 233: '872', 6: '', 20: '', 230: '99.3', 215: '', 102: '47.7', 56: 'Center', 146: '85.1', 147: '40.6', 23: '', 231: '47.8'}", "{103: '1.9', 18: '', 154: '', 147: '48.6', 22: '', 233: '879', 76: '', 459: '', 55: '719', 29: '', 102: '54.2', 56: 'Center', 328: '', 146: '94.7', 20: ''}", "{215: '', 22: '', 56: 'Center', 233: '731', 103: '19', 78: '', 230: '97.7', 146: '78.2', 20: '', 102: '50.4', 29: '', 18: '', 55: '899', 147: '43.3', 82: '', 231: '48.7'}")
events <- c("A", "B", "C")
df <- data.frame(situations, events)
并且我想过滤掉包含6(或6:你能帮我一下吗?
我尝试过用grepl来选择行,但是不需要输出。df$filter <- as.integer(grepl('6:', df$situations))
它保留所有包含6的值。例如76、146、56等
在Python中,我使用这样简单的代码来完成这个任务,但在R中找不到类似的东西。df['is_ok'] = df['situations'].apply(lambda x: True if 6 in x else False)
解决方案
感谢@MrFlick,我找到了想要的输出
as.integer(grepl('\\b6:', df$situations))
谢谢大家
2条答案
按热度按时间jogvjijk1#
它不是真正的JSON,但我们可以用一个小正则表达式强制它。
(
_
特殊参数需要R〉= 4.2。)如果你需要数字是数字,我们可以使用
type.convert
:kq0g1dla2#
也许你可以尝试从
reticulate
中提取py_eval
来解析字符串向量situations
,例如,你将获得