Разделите фрейм данных на столбцы идентификаторов (только с одним уникальным значением) и столбцы переменных (с более чем одним значением) - PullRequest
1 голос
/ 02 апреля 2020

У меня есть фрейм данных с несколькими столбцами идентификаторов, содержащими только одно уникальное значение, и столбцами, которые на самом деле содержат переменные. Как их отделить?

Я придумал следующий подход, использующий условное выражение в sapply, но мне было интересно, может ли быть более элегантный способ сделать это?

Я доволен любым пакетом, и любой вывод, где кадры данных разделены, это также может быть в списке. Каждый кадр не нужно присваивать новому объекту.

mydf <- data.frame(a = 'a', b = 'b', val1 = 1:10, val2 = 10:1)

head(mydf,3)
#>   a b val1 val2
#> 1 a b    1   10
#> 2 a b    2    9
#> 3 a b    3    8

id_cols <- mydf[sapply(names(mydf), function(x) {length(unique(mydf[[x]])) == 1})]

variable_cols <- mydf[sapply(names(mydf), function(x) {length(unique(mydf[[x]])) != 1})]

head(id_cols, 3)
#>   a b
#> 1 a b
#> 2 a b
#> 3 a b

head(variable_cols, 3)
#>   val1 val2
#> 1    1   10
#> 2    2    9
#> 3    3    8

Создан в 2020-04-02 пакетом Представить (v0.3.0)

1 Ответ

3 голосов
/ 02 апреля 2020

Очень, очень немного более короткий путь будет

Var           = lengths(lapply(mydf, unique)) > 1
id_cols       = mydf[, Var]
variable_cols = mydf[, !Var]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...