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