Как получить подсчеты для каждого уровня фактора в кадре данных в r и получить наблюдения с низкими подсчетами - PullRequest
0 голосов
/ 19 марта 2019

Я очень плохо знаком с R и программированием в целом, поэтому моё описание вещей может быть немного неправильным.Я постараюсь быть максимально ясным.У меня есть фрейм данных df.train, который содержит сотни уровней факторов с запутанными записями, которые могут быть или не быть уникальными для их соответствующих факторов.Я пытаюсь получить идентификатор строки каждого наблюдения, у которого есть хотя бы один факторный уровень ниже некоторого заданного количества.Поэтому, если есть хороший способ получить это, я бы хотел получить этот ответ.если нет, то это моя текущая попытка найти решение, и где я застрял, с примером кадра данных:

structure(list(GKUhYLAE = structure(c(1L, 2L, 1L, 1L, 2L, 1L), .Label = c("DDOFi", 
"fVvMw"), class = "factor"), OnTaJkLa = structure(c(1L, 1L, 1L, 
1L, 1L, 1L), .Label = c("LDyDX", "sbxXu"), class = "factor"), 
    SsZAZLma = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("fSMSz", 
    "Hltat"), class = "factor"), BMmgMRvd = structure(c(2L, 1L, 
    2L, 2L, 2L, 2L), .Label = c("IjEdt", "QZujc"), class = "factor"), 
    OMtioXZZ = c(3L, 21L, 30L, 21L, 12L, 12L), bIBQTaHw = structure(c(1L, 
    3L, 1L, 3L, 3L, 2L), .Label = c("ALZyK", "qqkkL", "wQABW"
    ), class = "factor")), row.names = 1013:1018, class = "data.frame")

, который дает мне следующую таблицу

      GKUhYLAE   OnTaJkLa   SsZAZLma    BMmgMRvd    OMtioXZZ    bIBQTaHw
1013  DDOFi      LDyDX      fSMSz       QZujc       3           ALZyK
1014  fVvMw      LDyDX      fSMSz       IjEdt       21          wQABW
1015  DDOFi      LDyDX      fSMSz       QZujc       30          ALZyK
1016  DDOFi      LDyDX      fSMSz       QZujc       21          wQABW
1017  fVvMw      LDyDX      fSMSz       QZujc       12          wQABW
1018  DDOFi      LDyDX      fSMSz       QZujc       12          qqkkL

Я могувыполните следующую команду, чтобы выяснить, какие факторы имеют значения ниже определенной суммы:

library (dplyr)
library(plyr)
df.test.a = lapply( df.test[,!names( df.test) %in% c("id")], count)
df.test.freqcount <- as.data.frame(do.call(rbind,  df.test.a)) 
df.test.list = df.test.freqcount[which( df.test.freqcount$freq <2),]

Возвращает:

            x       freq
BMmgMRvd.1  IjEdt   1
OMtioXZZ.1  NA      1
OMtioXZZ.4  NA      1
bIBQTaHw.2  qqkkL   1 

(самый левый столбец - это имя столбца с .xпосле этого, который я предполагаю, является уровнем фактора).Вот где я застрял.Я подумал, что лучший способ получить то, что я хочу, это сделать вектор с записями true или 1, когда эта запись моего информационного кадра имеет хотя бы один столбец с фактором, который находится в моем списке отмеченных факторов.Я не могу понять, как это сделать или как создать подходящий список отмеченных факторов.я хочу написать следующее:

df.test.freqcount[which( df.test.freqcount$freq <2),]$x

Поскольку имена не являются уникальными, и я получаю значения NA, я не ожидаю, вместо того, чтобы проверять с помощью $ xi, я хочу проверить с помощью column.factorlevel, которое является скрытым столбцом.слева от таблицы, которую я дал, если возможно.

то, что я хотел бы получить в качестве вывода:

        low_count_factor
1013    TRUE
1014    TRUE
1015    TRUE
1016    FALSE
1017    FALSE
1018    TRUE
...