Выберите только выбранный тип данных, используя функцию SUBSET [duplicate]

В JDK1.8 вы можете использовать агрегированные операции и выражение лямбда:

String[] strArray = new String[] {"John", "Mary", "Bob"};

// #1
Arrays.asList(strArray).stream().forEach(s -> System.out.println(s));

// #2
Stream.of(strArray).forEach(System.out::println);

// #3
Arrays.stream(strArray).forEach(System.out::println);

/* output:
John
Mary
Bob
*/
7
задан Irina Maria 28 July 2013 в 22:52
поделиться

3 ответа

Некоторые данные:

insurance <- data.frame(
  int   = 1:5,
  fact1 = letters[1:5],
  fact2 = factor(1:5),
  fact3 = LETTERS[3:7]
)

Я бы использовал sapply, как вы, но в сочетании с is.factor, чтобы вернуть логический вектор:

is.fact <- sapply(insurance, is.factor)
#   int fact1 fact2 fact3 
# FALSE  TRUE  TRUE  TRUE

Затем используйте [, чтобы извлечь эти столбцы:

factors.df <- insurance[, is.fact]
#   fact1 fact2 fact3
# 1     a     1     C
# 2     b     2     D
# 3     c     3     E
# 4     d     4     F
# 5     e     5     G

Наконец, чтобы получить уровни, используйте lapply:

lapply(factors.df, levels)
# $fact1
# [1] "a" "b" "c" "d" "e"
# 
# $fact2
# [1] "1" "2" "3" "4" "5"
# 
# $fact3
# [1] "C" "D" "E" "F" "G"

Вы также можете найти str(insurance) интересным как краткое описание.

12
ответ дан flodel 26 August 2018 в 23:34
поделиться

используя фрейм данных «страхование» от flodel, чтобы получить все факторы за один раз, вы можете использовать apply, например:

apply(insurance,2,factor)

     int fact1 fact2 fact3
[1,] "1" "a"   "1"   "C"  
[2,] "2" "b"   "2"   "D"  
[3,] "3" "c"   "3"   "E"  
[4,] "4" "d"   "4"   "F"  
[5,] "5" "e"   "5"   "G"  

, если вы заинтересованы только в уровнях одним из факторов вы можете сделать следующее:

factor(insurance$fact1)

[1] a b c d e
Levels: a b c d e
-2
ответ дан hvollmeier 26 August 2018 в 23:34
поделиться

Это (почти) кажется идеальным временем для использования редко используемой функции rapply

rapply(insurance, class = "factor", f = levels, how = "list")

Или

Filter(Negate(is.null),rapply(insurance, class = "factor", f = levels, how = "list"))

Чтобы удалить элементы NULL (которые t факторов)

Или просто

lapply(Filter(is.factor,insurance), levels))
1
ответ дан mnel 26 August 2018 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: