Возврат имен строк условия встречи данных, хранящихся в списке, с помощью команды lapply - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть список, содержащий фреймы данных, каждый с различными наблюдениями. Вот пример того, с чем я работаю:

set.seed(9)
df<- data.frame(x1 = round(runif(80, 0, 5)),
                x2 = round(runif(80, 0, 15)),
                x3 = sample(letters[1:8], 80, replace = TRUE))
my.list <- vector(mode = "list", length = 8)                            
my.list <- lapply(unique(df$x3), function(x) {subset(df, x3 == x)}) 

Я пытаюсь найти имена строк каждого фрейма данных, для которого выполняется условие. Используя lapply(), самое близкое к тому, чего я хочу достичь - это код ниже. Тем не менее, это возвращает NA; Я не уверен, почему это происходит.

> lapply(my.list, function(x) {x <- row.names(x[which(x[,1:2] < 5), ]); x})[[1]]
 [1] "1"    "5"    "11"   "22"   "46"   "53"   "61"   "63"   "64"   "79"   "80"   "NA"   "NA.1" "NA.2" "NA.3"

Что нужно сделать, чтобы возвращались только имена строк?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы должны изменить свой lapply(my.list, function(x) {x <- row.names(x[which(x[,1:2] < 5), ]); x})

с этим ниже, чтобы убедиться, что только список подмножеств go в вызове row.names

lapply(my.list, function(x) {x <- row.names(x[which(x[,1:2][1] < 5), ]); x})
0 голосов
/ 25 февраля 2020

Вот способ, которым вы можете сделать:

v = lapply(my.list, function(x) {
                y <- rowSums(x[,1:2] < 5) == 2
                names(y[y == T])
          })

print(v)

[[1]]
[1] "1"  "13" "65"

[[2]]
[1] "20" "48" "58" "63"

[[3]]
[1] "3"  "43"

[[4]]
[1] "5"  "12" "24" "77" "80"

[[5]]
[1] "8"  "31"

[[6]]
[1] "25"

[[7]]
[1] "17" "19" "23" "49" "60" "62"

[[8]]
[1] "15" "30" "40"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...