有条件地替换r中列表的列表中的特定值



试着寻找一个类似的问题,因为我想以前可能有人问过这个问题,但我没能做到,所以在这里。

我的数据集中有一个列表的列表,其中包含字符。例如:

data$list_items[1]
[[1]]
[1] "633" "0" 
data$list_items[2]
[[1]]
[1] "0"
data$list_items[3]
[[1]]
[1] "0" "357" "-1" "A21"

以此类推。它们是数字,但它们被存储为字符,因为一些项目代码中有字母。所有行至少包含"0"这就像在我合并成列表的列表的列中填充NAs,而有些列表还包含"-1"这就意味着没有定义

我只是想去掉"0"one_answers"1";元素,并将剩下的可能成为空集的行替换为字母"NA"

我使用for循环将它们全部替换为"NA"然后删除重复项并删除"从长度为1的所有列表中,但是有一种方法可以像这样使用apply函数吗?我被卡在空列表被"NA">

取代的步骤上了。在我展示的3个例子中,我的最终结果是:

data$list_items[1]
[[1]]
[1] "633" 
data$list_items[2]
[[1]]
[1] "NA"
data$list_items[3]
[[1]]
[1] "357" "A21"

您可以尝试使用lapply-

data$list_items <- lapply(data$list_items, function(x) {
#Drop 0 and -1 value
x <- x[!x %in% c(0, -1)]
#If empty return NA
if(length(x)) x else NA
})

最新更新