Как получить строки, где значения в любом столбце больше, чем значение? - PullRequest
0 голосов
/ 08 февраля 2019

мои данные таковы:

> head(df)
   ETDPAT04 ETDPAT06 ETDPAT08 ETDPAT12
1:        2        .        3        3
2:       12       12        .       14
3:        6        5        6        7
4:        1        1        1        1
5:        1        3        3        2
6:        3        3        2        4
...

как вернуть все строки, где значение любого из этих столбцов больше 61?

Я пытался сделать это:

a=df[apply(df, 1, function(row) {any(row > 61)}),]

то, что я получил, не удовлетворяет моему вышеупомянутому состоянию.Я получил это:

    > head(a)
   ETDPAT04 ETDPAT06 ETDPAT08 ETDPAT12
1:        6        5        6        7
2:        6        6        7        8
3:        8        3        6        4

...

в моем столбце данных нет данных в тех столбцах, которые больше 61, поэтому я должен получить ноль результатов.

colMax <- function(df) sapply(df, max, na.rm = TRUE)
colMax(df)
ETDPAT04 ETDPAT06 ETDPAT08 ETDPAT12 
     "9"      "9"      "9"      "9" 

Также:

> sapply(df, class)
   ETDPAT04    ETDPAT06    ETDPAT08    ETDPAT12 
"character" "character" "character" "character" 

Я получил df от:

t=data.table::fread("phs000086.v3.pht000279.v1.DS-T1D-IRB.txt", header=TRUE,na.strings = ".")
colnames(t) <- as.character(t[1,])
t <- t[2:nrow(t),]
df=select(t, ETDPAT04, ETDPAT06,ETDPAT08,ETDPAT12)
df <- sapply( df, as.numeric )
a=df[apply(df, 1, function(row) {any(row > 61)}),]
dim(a)
44  4
head(a)

     ETDPAT04 ETDPAT06 ETDPAT08 ETDPAT12
[1,]       NA       NA       NA       NA
[2,]       NA       NA       NA       NA

Мои исходные данные .txt выглядят так:

       phv00033517.v1.p1.c1 phv00033518.v1.p1.c1 phv00033519.v1.p1.c1
1:                PHASE                  AGE                ADULT
2:                    2                   17                    0
3:                    2                   29                    1
4:                    2                   35                    1
5:                    2                   14                    0

Я хотел удалить первую строку и сделать2-я строка в заголовке, поэтому мои имена столбцов становятся следующими: PHASE, AGE ...

Я также пытался сделать это более простым способом, но все еще не нашел решения:

library(dplyr)
d<- read.table("phs000086.v3.pht000279.v1.p1.c1.DCCT_ms2exprt.DS-T1D-   IRB.txt", header = FALSE)
write.table(d,"phen2", quote=F,sep = " ",row.names = F,col.names=F)
d1=read.table("phen2", header=TRUE)
d2=select(d1,AGE, FEMALE,HBAEL,ETDPAT00, ETDPAT02, ETDPAT04, ETDPAT06, ETDPAT08, ETDPAT10, ETDPAT12)
d2[d2=="."]<-NA

asNumeric <- function(x) as.numeric(as.character(x))
factorsNumeric <- function(d) modifyList(d, lapply(d[, sapply(d, is.factor)],   
                                               asNumeric))
f <- factorsNumeric(d2)
f[4:9] <- lapply(f[4:9], as.integer)

a=f[apply(t(f[,4:10]>61),1, any), ]

Яполучение кадра данных с 800 или чем-то еще строк, заполненных NA.Пока я пытаюсь найти любой столбец, где любые значения> 61.То же самое, если я смотрю на любую строку, где значение> 61, получая 77 строк всех NA

a=f[apply(t(f[,4:10]>61),2, any), ]

sapply(f, class)
      AGE    FEMALE     HBAEL  ETDPAT00  ETDPAT02  ETDPAT04  ETDPAT06     ETDPAT08 
"integer" "integer" "numeric" "integer" "integer" "integer" "integer"   "integer" 
 ETDPAT10  ETDPAT12 
"integer" "integer"

, я полностью застрял здесь.Кто-нибудь может оказать любую помощь?Нужно ли мне давать больше информации о моих данных?

1 Ответ

0 голосов
/ 08 февраля 2019

Предполагая, что DT, воспроизводимый в примечании в конце, делает первую строку заголовком и преобразует столбцы в числовые.Затем выберите строки, как указано:

DT <- fread(paste(paste(do.call("paste", DT), collapse = "\n")), na.strings = ".")

DT[apply(DT > 61, 1, any), ]
## Empty data.table (0 rows) of 4 cols: ETDPAT04,ETDPAT06,ETDPAT08,ETDPAT12

Примечание

Lines <- "
   ETDPAT04 ETDPAT06 ETDPAT08 ETDPAT12
        2        .        3        3
       12       12        .       14
        6        5        6        7
        1        1        1        1
        1        3        3        2
        3        3        2        4"

library(data.table)
DT <- fread(Lines, colClasses = "character", header = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...