r语言 - 寻找替换列表中字符向量元素的方法



我有一个不同长度的字符向量列表,包含标识符(例如"011"或"12",表示金额的数字("112.3";或"490.5")和年份("2011"或"2020",空元素(")和只包含一个点的元素(".")。我想摆脱字符向量的元素,只包含一个点或为空。标识符的前导零很重要,因此不能将类型更改为数字。

原始数据

l <- list(c("2015","2016"),c(""),c("."), c("0","2418.9","292.4"),c("2",".",".","2394.6"),c("011","","934.0","1200.7"))

应该像这样:

l_final <- list(c("2015","2016"),c("0","2418.9","292.4"),c("2","2394.6"),c("011","934.0","1200.7"))

我的想法是创建一个带有TRUE/FALSE的列表,指示每个向量要保留哪些元素,但现在我真的被卡住了,因为下面的方法不起作用(它返回零整数):

test <- lapply(list, function(i) {unlist(lapply(list[i], function(b) which(b==".")))})

关于"."的表达式,我已经尝试了其他正则表达式,如"."one_answers"[]"。

我们可以遍历list,将非.""Filter元素的子集从列表中的空元素

Filter(length, lapply(list, function(x) x[! x %in% c(".", "")]))

与产出

[[1]]
[1] "2015" "2016"
[[2]]
[1] "0"      "2418.9" "292.4" 
[[3]]
[1] "2"      "2394.6"

两步解决方案,如果需要的话,将lapply加倍作为替代方案:

# data
l <- list(c("2015","2016"),c(""),c("."), c("0","2418.9","292.4"),c("2",".",".","2394.6"))
# remove those with "." or ""
l2 <- lapply(l, function(x) {x[!(x %in% c(".", ""))]})
# remove empty list positions
l2[lapply(l2, length) > 0]
#[[1]]
#[1] "2015" "2016"
#[[2]]
#[1] "0"      "2418.9" "292.4" 
#[[3]]
#[1] "2"      "2394.6"

相关内容

  • 没有找到相关文章

最新更新