R, флаг, если вход вне допустимого диапазона - PullRequest
0 голосов
/ 28 января 2019

У меня есть несколько опросов, которые были завершены на бумаге, а затем вручную введены в электронные таблицы Excel.

Я хочу создать новый столбец, который указывает, когда существует число, которое было введеновне возможного диапазона (1-4)

Это то, что у меня есть, но я уверен, что есть лучший способ сделать это.

function(x) 
{for (v in 1:length(x)) assign(names(x)[v], x[[v]])
 if(var1 <= 1 & var1 >= 4 &
    var2 <= 1 & var2 >= 4 & 
    var3 <= 1 & var3 >= 4 &
    var4 <= 1 & var4 >= 4 &
    var5 <= 1 & var5 >= 4 & 
        ...       
    var28 <= 1 & var5 >= 28) {within_value <- "TRUE"}
 else { within_value <- "FALSE"}
}

Я хочу что-то вродестолбец "inside_range" здесь:

Name       var1    var2    var3  ...  var27  var28   within_range
Sub100      1       5       4            3     8     FALSE
Sub101      2       4       3            5     1     TRUE
Sub102      5       2       1            1     2     TRUE

1 Ответ

0 голосов
/ 28 января 2019

Вы можете использовать data.table::between()

library(data.table)
df1$within_range <- sapply(1:nrow(df1), function(x) 
  all(between(df1[x, -1], 1, 6)))  # e.g. between 1 and 6

Или - если вы предпочитаете прямолинейное решение, вы можете сделать

df1$within_range <- sapply(1:nrow(df1), function(x) { 
  tr <- df1[x, -1]
  all(tr >= 1 & tr <= 6)
})

Результат

> df1
    Name var1 var2 var3 var27 var28 within_range
1 Sub100    1    5    4     3     8        FALSE
2 Sub101    2    4    3     5     1         TRUE
3 Sub102    5    2    1     1     2         TRUE

Данные

df1 <- structure(list(Name = structure(1:3, .Label = c("Sub100", "Sub101", 
"Sub102"), class = "factor"), var1 = c(1L, 2L, 5L), var2 = c(5L, 
4L, 2L), var3 = c(4L, 3L, 1L), var27 = c(3L, 5L, 1L), var28 = c(8L, 
1L, 2L)), row.names = c(NA, -3L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...