Как избавиться от пустых значений (0 значений) с помощью функции table () в R - PullRequest
0 голосов
/ 21 мая 2019

У меня простой вопрос. Я хочу сделать таблицу частот с 3 переменными моей исходной таблицы. Если я сделаю

as.data.frame(table(df$var1,df$var2,df$var3))

, поскольку он предоставляет каждую возможную комбинацию из 3 переменных - и у меня есть много значений для каждой переменной - я получаю ошибку: «попытка составить таблицу с> = 2 ^ 31 элементами».

Проблема в том, что многие комбинации фактически пусты. Другими словами, для многих из этих возможных комбинаций частота равна 0, и поэтому мне было интересно, как заставить R учитывать только ненулевые частоты (чтобы функция table () работала с моими 3 переменными без выдача сообщения об ошибке.

Есть идеи?

Большое спасибо за чтение.

Очень упрощенная таблица (не моя оригинальная - поскольку у меня много значений, так что декартово произведение трех из них при запуске "as.data.frame (table ()) ¨ выходит за пределы 2 ^ 31 элементов - может быть :

var1           var2           var3   var4  var5
0               a1            1234     a     1
1               a2            1234     b     2
1               a2            1235     c     2
1               a2            1235     a     7
1               a1            1235     d     3

И то, что я хочу, это частоты первых трех переменных вместе через код:

as.data.frame(table(df$var1,df$var2,df$var3))

Это то, что я пытался:

subset(table(df$var1,df$var2,df$var3),table(df$var1,df$var2,df$var3)$Freq!='0') 

Или

droplevels(table(df$var1,df$var2,df$var3))

без удачи.

В случае, описанном для моего примера, код as.data.frame (таблица (df $ var1, df $ var2, df $ var3)) предоставляет такую ​​таблицу, как вы знаете, создавая дополнительную переменную "Freq «который дает время каждой комбинации из 3 переменных в строке -:

var1           var2           var3   Freq
0               a1            1234     1 
0               a1            1235     0
0               a2            1234     0 
0               a2            1235     0
1               a1            1234     0 
1               a1            1235     1
1               a2            1234     1 
1               a2            1235     1

Но, как я уже сказал, так как есть много строк с частотой 0, заставляя R не учитывать их при запуске таблицы функций (), можно значительно упростить вычисления с гораздо меньшим количеством элементов, чем 2 ^ 31, так что результат может быть предоставлен без какого-либо сообщения об ошибке. Так что, если возможно, после применения этого обходного пути, результат, который я ожидаю, будет примерно таким (где все строки с Freq = 0 не рассчитываются при запуске table ()):

var1           var2           var3    Freq
0               a1            1234     1 
1               a1            1235     1
1               a2            1234     1 
1               a2            1235     1

1 Ответ

0 голосов
/ 22 мая 2019

Ну, я думаю, что нашел решение.Это в основном:

a <- суммировать (group_by (df, var1, var2, var3), count = n ()) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...