R,如果输入项超出可能范围,则进行标记

时间:2019-01-28 18:26:27

标签: r range

我在纸上完成了一些调查,然后手动将其输入到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"}
}

我想要类似“ within_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 :(得分:2)

您可以使用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")