【问题标题】:How drop columns by CLASSES [duplicate]如何按类删除列[重复]
【发布时间】:2019-10-31 12:52:14
【问题描述】:

我有以下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 函数)。

【问题讨论】:

  • data_1[, !sapply(data_1, is.integer), drop=FALSE]
  • 试试data_1[!sapply(data_1, is.integer)]lapply(list_1, function(i)i[!sapply(i, is.integer)])

标签: r list dataframe


【解决方案1】:

这是使用lapply 的 R 基础解决方案:

myfun <- function(df){
  idx <- sapply(seq_len(ncol(df)), function(x) class(df[,x])) != "integer"

  df[, idx]
}

lapply(list_1, myfun)

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 2018-04-15
    • 2018-11-27
    • 2014-12-28
    • 2019-07-28
    • 2015-06-10
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多