r - 如何按 CLASSES 删除列
问题描述
我有以下内容data.frame
:
data_1 <- structure(list(Line = structure(1:4, .Label = c("K1", "K2", "K3",
"K4"), class = "factor"), A = c(4L, 1L, -1L, 2L), B = c(3L, -2L,
-1L, 4L), C = c(-1L, 1L, 2L, 5L), D = c(2L, -5L, 3L, -7L), E = c(4L,
1L, 4L, 9L)), class = "data.frame", row.names = c(NA, -4L))
我想要删除integer
列。我尝试:
rapply(object = data_1, classes = 'integer', how = 'list', f = function(x) {
x <- NULL
})
和
lapply(X = data_1, FUN = function(x) {
Filter(f = is.integer, x = x) <- NULL
})
但不起作用。
我还需要为列表执行此操作:
list_1 <- list(data_1 = structure(list(Line = structure(1:4, .Label = c("K1",
"K2", "K3", "K4"), class = "factor"), A = c(4L, 1L, -1L, 2L),
B = c(3L, -2L, -1L, 4L), C = c(-1L, 1L, 2L, 5L), D = c(2L,
-5L, 3L, -7L), E = c(4L, 1L, 4L, 9L)), class = "data.frame", row.names = c(NA,
-4L)), data_2 = structure(list(Line = structure(1:4, .Label = c("K1",
"K2", "K3", "K4"), class = "factor"), A = c(4L, 1L, -1L, 2L),
B = c(3L, -2L, -1L, 4L), C = c(-1L, 1L, 2L, 5L), D = c(2L,
-5L, 3L, -7L), E = c(4L, 1L, 4L, 9L)), class = "data.frame", row.names = c(NA,
-4L)), data_3 = structure(list(Line = structure(1:4, .Label = c("K1",
"K2", "K3", "K4"), class = "factor"), A = c(4L, 1L, -1L, 2L),
B = c(3L, -2L, -1L, 4L), C = c(-1L, 1L, 2L, 5L), D = c(2L,
-5L, 3L, -7L), E = c(4L, 1L, 4L, 9L)), class = "data.frame", row.names = c(NA,
-4L)))
我尝试:
rapply(object = list_1, classes = 'integer', how = 'list', f = function(x) {
rapply(x, rm(x))
})
lapply(X = list_1, FUN = function(x) {
lapply(X = Filter(is.integer, x), rm(x))
})
但是,也行不通。
期望输出:
Line
1 K1
2 K2
3 K3
4 K4
我需要一个R base
仅包含而不是附加包(带有dplyr
和您的_if
功能)的解决方案。
解决方案
这是一个 R 基础解决方案,使用lapply
:
myfun <- function(df){
idx <- sapply(seq_len(ncol(df)), function(x) class(df[,x])) != "integer"
df[, idx]
}
lapply(list_1, myfun)
推荐阅读
- c - 相互调用的函数,在另一个函数中声明
- r - 计算列表中具有 r 中相同元素的向量
- php - 从 Woocommerce 中的管理订单列表中的过滤器菜单重命名订单状态
- ios - 如何使用 UILabel 和 DateFormatter 显示当前时间?
- javascript - 屏蔽或隐藏音乐流中的 url
- python - Django REST framework - 3 个模型相互关联,DELETE 请求失败
- python - python中纯套接字上的HTTP服务器
- java - 无法反序列化 JSON 输入
- c# - 在线游戏中打印窗口不捕获
- android - Android将多边形保存为图像并设置1:10000比例