2017-01-08 2 views
0

table имеет своеобразное поведение в том смысле, что он использует имя переменной в качестве таблицы «название»Удалить имя переменной в качестве заголовка таблицы

> table(c("A","A","B")) 

A B 
2 1 
> a<-c("A","A","B");table(a) 
a 
A B 
2 1 

Такое поведение не очень удобно, если у вас есть функция, которая возвращает случайные таблицы

> aux <- function(x) return(table(x)) 
> aux(a) 
x 
A B 
2 1 

Есть ли способ удалить заголовок таблицы? Могу ли я удалить заголовок таблицы и не получить эту пустую строку? Я нашел обходное решение, но я не вполне доволен этим.

> aux <- function(x) return(table(identity(x))) 
> aux(a) 

A B 
2 1 
+0

Hacky, но быстро: 'таблица (» '= а) ' – alistaire

+0

„Название“Вы жалуетесь это атрибут, который получает отображается в' print.table' функции, но это не одно из значений который будет использоваться функцией, которой вы передали такой результат. –

ответ

1

Мы можем использовать as.vector

as.vector(table(a)) 
#[1] 2 1 

Если нам нужно удалить 'а' во втором случае

tbl <- table(a) 
names(dimnames(tbl)) <- NULL 
+0

Спасибо, ваш второй метод хранит имена элементов. – Enredanrestos

+0

@Enredanrestos Исходя из вашего вопроса, не совсем ясно, хотите ли вы удалить «a» и пространство под ним, т.е. «Могу ли я удалить заголовок таблицы и не получить эту пустую строку?» Или полные атрибуты «имена» Используя второй метод, 'dimnames' cn устанавливается в NULL, как показано ZheyuanLi, т.е.' dimnames (tbl) <- NULL', и это будет вектор без каких-либо атрибутов. – akrun

+0

Спасибо за ваш комментарий. Я имел в виду, что это хорошо, сохраняя имена элементов. Я хочу удалить «имена» атрибута «dimnames». Но я хотел бы сохранить «dimnames». Первый метод также удаляет их. Теперь я понимаю, что пустая строка связана с пустой строкой, заменяющей имя dimnames. – Enredanrestos

3

Вы можете использовать deparse.level = 0 в table(). Проверьте help(table) за возможные значения с пояснениями.

a <- c("A", "A", "B") 

table(a) 
# a 
# A B 
# 2 1 
table(a, deparse.level = 0) 
# 
# A B 
# 2 1 
+0

Я бы сказал, что это «истинный» способ, но я также предлагаю 'c (table (a))' – thelatemail

+0

@thelatemail - Возможно, но 'c (table (a))' больше не является таблицей. –

+0

Правильно - это может вызвать проблемы, если люди ожидают фактический объект класса «table». – thelatemail

Смежные вопросы