Проблемы уровня фактора после заполнения фрейма данных с использованием соответствия - PullRequest
0 голосов
/ 24 октября 2018

Я использую два больших файла данных, каждый из которых имеет >2m записей.Примерные фреймы данных:

x <- data.frame("ItemID" = c(1,2,1,1,3,4,2,3,4,1), "SessionID" = c(111,112,111,112,113,114,114,115,115,115), "Avg" = c(1.0,0.45,0.5,0.5,0.46,0.34,0.5,0.6,0.10,0.15),"Category" =c(0,0,0,0,0,0,0,0,0,0))
y <- data.frame("ItemID" = c(1,2,3,4,3,4,5,7),"Category" = c("1","0","S","120","S","120","512","621"))

Я успешно заполнил x$Category, используя следующую команду

x$Category <- y$Category[match(x$ItemID,y$ItemID)]

, но

x$Category

дал мне

[1] 1   0   1   1   S   120 0   S   120 1  
Levels: 0 1 120 512 621 S

В x есть только четыре категории, но Levels показывает шесть.Точно так же частота показывает мне 512 и 621 с частотой 0.Я использую те же данные для классификации, где показаны шесть классов вместо четырех, что отрицательно влияет на показатель f, отзыв и т. Д.

table(x$Category)
0   1 120 512 621   S 
2   4   2   0   0   2 

пока я хочу

table(x$Category)
0   1 120  S 
2   4   2  2 

Я попытался объединить это и это с рядом других вопросов, но это дает мнесообщение об ошибке.Я нашел здесь Практические пределы фрейма данных R , что это ограничение R.

1 Ответ

0 голосов
/ 24 октября 2018

Я бы пропустил столбец Category в вашем x data.frame, поскольку он, кажется, служит только заполнителем до тех пор, пока не будут заполнены значения из y data.frame. Затем вы можете использовать left_join из dplyr с ItemID в качествеключевая переменная, за которой следует droplevels (), как предложено TingITangIBob.

Это сближает вас, но мой стол не совсем соответствует вашему:

dplyr::select(x, -Category) %>%
dplyr::left_join(y, by = "ItemID") %>%
droplevels()

0 1 120 S

2 4 4 4

Iдумаю, что это может иметь отношение к повторяющимся ItemIDs в x?

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