Подмножество данных кадра по фактору мощности? - PullRequest
1 голос
/ 03 мая 2020

Я подозреваю, что это будет дубликат, но мои попытки найти ответ потерпели неудачу. Предположим, что у меня есть фрейм данных со столбцами, состоящими исключительно из целых чисел или факторов. Некоторые из этих столбцов имеют факторы со многими уровнями, а некоторые нет. Предположим, что я хочу выбрать части или иным образом установить подмножество данных таким образом, чтобы получить только столбцы с факторами, которые имеют менее 10 уровней. Как я могу это сделать? Моей первой мыслью было сделать особенно неприятную команду sapply, но я надеюсь на лучший способ.

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Мы можем использовать select_if

library(dplyr) 
df1 %>%
    select_if(~ is.factor(.) && nlevels(.) < 10)

С воспроизводимым примером, используя iris

data(iris)
iris %>%
       select_if(~ is.factor(.) && nlevels(.) < 10)

Или используя sapply

i1 <- sapply(df1, function(x) is.factor(x) && nlevels(x) < 10)
df1[i1]
1 голос
/ 03 мая 2020

С data.table вы можете сделать:

library(data.table)
setDT(df)
df[,.SD, .SDcols = sapply(df, function(x) length(levels(x))<10)]

Пример:

df <- data.table(x = factor(1:3, levels = 1:5), y = factor(1:3, levels = 1:10))
df[,.SD, .SDcols = sapply(df, function(x) length(levels(x))>5)]
 y
1: 1
2: 2
3: 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...