2015-12-17 3 views
3

Как я могу суммировать два уровня факторов внутри таблицы? Например, я хотел бы подвести лишай + virginica в этом случае ...Математические операции внутри таблицы xtabs() в R

t1 <- xtabs(~Species, iris) 

> t1 
# Species 
# setosa versicolor virginica 
#  50   50   50 

, а затем удалить лишай и virginica, в результате чего новый уровень «sumV» и его значение.

ответ

2
t1 <- xtabs(~Species, iris) 

#Species 
# setosa versicolor virginica 
#  50   50   50 

просуммировать значения, которые вы хотите, и назначить их на новый уровень:

t1["sumV"] = t1["versicolor"] + t1["virginica"] 

# setosa versicolor virginica  sumV 
#  50   50   50  100 

Наконец, удалите значения, которые вы не хотите хранить:

t1[-c(2,3)] 

#setosa sumV 
# 50 100 
+0

спасибо @Nancy! который работал на то, что я искал ... – Juanchi

3

Мы можем установить набор данных путем изменения «versicolor» и «virginica» на новое значение «sumV», а затем сделать xtabs.

xtabs(~Species,transform(iris, Species= c('setosa', 
      'sumV')[(Species %in% c('versicolor', 'virginica'))+1L])) 
#Species 
#setosa sumV 
# 50 100 

Или, как предложил @Ananda Mahto, мы можем использовать replace с grep

xtabs(~ Species, transform(iris, Species = 
    replace(as.character(Species), grepl("^v", Species), "sumV"))) 
+1

Ницца это круто. Что делает + 1L? – Nancy

+0

@Nancy Спасибо за комментарий. Я преобразовал логический вывод TRUE/FALSE в 'c (2,1)' путем добавления на 1, используя этот индекс, мы можем изменить его на 'setosa' и 'sumV' – akrun

+0

@akrun. Почему вы используете + 1L вместо +1 для этого? Не добавляет ли 1 в логическое значение то же самое? – Nancy

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