r - 在 r 中的列表列中的所有列表中将 numeric(0) 替换为 NA
问题描述
我在存储列表的数据框中有一列。下面是一个例子:
col
1 9
2 8, 8, 8, 5
3 1, 8, 10, 4
4 3, 6, 1, 6
5 9, 9, 10, 4
6 8, 8, 9, 2
7 6, 10, 4, 7
8 6, 1, 5, 9
9 4, 7, 5, 10
10 7, 9, 2, 5
这是我用来生成上述示例的代码:
set.seed(123)
example <- data.frame(matrix(NA_real_, nrow=10, ncol=1))
colnames(example) <- "col"
for(y in 1:10) {
example$col[y] <- list(c(c(sample(1:10,1)),c(sample(1:10,1)),c(sample(1:10,1)),c(sample(1:10,1))))
}
example$col[1] <- list(c(9))
我想在我的数据框的这一列中从所有这些列表中删除所有出现的数字 9,以获得如下内容:
col
1 NA
2 8, 8, 8, 5
3 1, 8, 10, 4
4 3, 6, 1, 6
5 10, 4
6 8, 8, 2
7 6, 10, 4, 7
8 6, 1, 5
9 4, 7, 5, 10
10 7, 2, 5
而不是这个,我目前正在使用example$col <- lapply(example$col, function(x){ x[x != 9] })
col
1 numeric(0)
2 8, 8, 8, 5
3 1, 8, 10, 4
4 3, 6, 1, 6
5 10, 4
6 8, 8, 2
7 6, 10, 4, 7
8 6, 1, 5
9 4, 7, 5, 10
10 7, 2, 5
我怎样才能将 替换为numeric(0)
并且NA_real_
仍然能够删除所有 9?
解决方案
您可以同时使用一个语句,删除 9并将单个 9 更改为。NA_real_
if
example$col <- lapply(example$col, function(x) {
if(length(x) == 1L && x == 9) NA_real_ else x[x != 9]
})
example
# col
# 1 NA
# 2 10, 1, 6
# 3 6, 5, 10, 5
# 4 7, 6, 2
# 5 3, 1, 4, 10
# 6 7, 7, 10
# 7 7, 8, 6, 6
# 8 3, 2, 10, 10
# 9 7, 8, 1, 5
# 10 8, 3, 4, 3
推荐阅读
- tableau-api - Tableau“地图”类型搞砸了大小的可视化
- php - PHP - SimpleXML xpath 函数来获取特定节点的值
- python - ValueError:无法将字符串转换为浮点数:变量中的空字符串
- c++ - 即使委托仅添加到 QTableView,QListView 项目也显示委托编辑器
- google-apps-script - Google Scripts - 在不同的工作表中触发和运行
- forms - VueJS - 长长的 v-if 列表的最佳替代方案是什么
- jquery-ui - 无法将连接列表中的项目添加到可排序列表
- unity3d - 在 2d 对象统一后渲染 3d 对象
- c# - ArgumentOutOfRangeException 但参数没有超出范围
- php - 在哪里更改 ubuntu 的 php-fpm.conf 中的监听端口?