мои данные таковы:
> 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"
, я полностью застрял здесь.Кто-нибудь может оказать любую помощь?Нужно ли мне давать больше информации о моих данных?