首页 > 解决方案 > R中for循环和ifelse的组合

问题描述

如果超出特定(和变量)值,我正在尝试在 R 中的“是”和“否”之间做出决定。对于每个测试值,应创建一个具有不同决策的新列。

这是一个手动创建的示例:

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

这个简单的例子给出了以下输出:

   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

有没有办法用for循环来做到这一点?我已经尝试过不同的东西,比如下面的代码,但这似乎是无稽之谈,因为它不会创建新的列等等:

n = c(seq(from=10, to=100, by=10))

for(i in n) {
ifelse(Test.data$Test > i, "Yes", "No")
}

谢谢大家!

标签: rfor-loopif-statement

解决方案


我们可以<-将输出 from 分配 ()到为列名ifelse创建的字符串。paste此外,我们不是循环遍历,而是遍历n“n”的序列

for(i in seq_along(n)) {
        Test.data[paste0("Test", i)] <- ifelse(Test.data$Test > n[i], "Yes", "No")
 }

推荐阅读