I'm trying to decide between "Yes" and "No" in R, if a specific (and variable) value is exceeded. For each value tested a new column with the different decisions should be created.
Here is a manually created example:
Test.data <- data.frame(c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100))
colnames(Test.data) <- c("Test")
Test.data$Test1 <- ifelse(Test.data$Test > 10, "Yes", "No")
Test.data$Test2 <- ifelse(Test.data$Test > 20, "Yes", "No")
Test.data$Test3 <- ifelse(Test.data$Test > 30, "Yes", "No")
Test.data
This simple example gives the following output:
Test Test1 Test2 Test3
1 10 No No No
2 20 Yes No No
3 30 Yes Yes No
4 40 Yes Yes Yes
5 50 Yes Yes Yes
6 60 Yes Yes Yes
7 70 Yes Yes Yes
8 80 Yes Yes Yes
9 90 Yes Yes Yes
10 100 Yes Yes Yes
Is there a way to do this with a for-loop? I already tried different stuff like the following code, but it seems to be nonsense, since it doesn't create new columns and so on:
n = c(seq(from=10, to=100, by=10))
for(i in n) {
ifelse(Test.data$Test > i, "Yes", "No")
}
Thanks everyone!
We can do the assignment ( <-
) of the output from ifelse
to a string created with paste
for the column names. Also, instead of looping over n
, we do the loop over the sequence of 'n'
for(i in seq_along(n)) {
Test.data[paste0("Test", i)] <- ifelse(Test.data$Test > n[i], "Yes", "No")
}
Perhaps you can try something like below
cbind(Test.data, ifelse(sapply(c(10, 20, 30), `<`, Test.data$Test), "Yes", "No"))
which gives
Test 1 2 3
1 10 No No No
2 20 Yes No No
3 30 Yes Yes No
4 40 Yes Yes Yes
5 50 Yes Yes Yes
6 60 Yes Yes Yes
7 70 Yes Yes Yes
8 80 Yes Yes Yes
9 90 Yes Yes Yes
10 100 Yes Yes Yes
You can use purrr::map_dfc
:
vals <- c(10, 20, 30)
result <- cbind(Test.data, purrr::map_dfc(vals,
~ifelse(Test.data$Test > .x, 'Yes', 'No')))
names(result)[-1] <- paste0('Test', seq_along(vals))
result
# Test Test1 Test2 Test3
#1 10 No No No
#2 20 Yes No No
#3 30 Yes Yes No
#4 40 Yes Yes Yes
#5 50 Yes Yes Yes
#6 60 Yes Yes Yes
#7 70 Yes Yes Yes
#8 80 Yes Yes Yes
#9 90 Yes Yes Yes
#10 100 Yes Yes Yes
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.