这是我正在使用的示例 Dataframe :
numbers <- data.frame(value=c(-5000,1,2,100,200,300,400,500, 1000, 2000, 10000, 12000))
我希望在此数据框中创建一个名为“output”的新列,其中包含如下所示的值:
- 如果值在1和10000之间,则与“值”列中的值相同
如果“值”列中的值大于10000,则为-10000,并且
如果“值”列中的值小于1,则为-1
在新列“输出”中输入所需的输出:一、一、二、一百、二百、三百、四百、五百、一千、两千、一万、一万。
我真的很想学习如何使用for循环,if,else if和else语句来获得这个输出,并尝试了以下方法:
for (i in 1:nrow (numbers$value)){
if (numbers$value[i] >10000){
numbers$output <- 10000)
} else if (numbers$value[i] < 1){
numbers$output <- 1)
} else {
numbers$output <- numbers$value)
}
}
不幸的是,这给了我一个错误,错误:“}”中意外的“}”
感谢您帮助修复此代码!
3条答案
按热度按时间mlnl4t2r1#
我明白你为什么要用for循环来解决这个问题了(我也有过类似的经历)。在R中,有一个很有用的东西叫做向量化。你可以使用 *apply家族来将一个函数应用于一个输入向量。这样,你就给予了函数一个输入,你就自动得到了一个相同长度的输出。
vc6uscn92#
原始代码中有几处错误:未初始化输出变量、不匹配且不需要的“)"、需要时未使用下标等错误,见下面修正后的代码。
下面是使用dplyr包中的
case_when
函数的更直接的解决方案:bis0qfac3#
本着ifelse-ness的精神,您也可以使用
ifelse()
函数。numbers$output <- ifelse(numbers$value > 1000, 1000, ifelse(numbers$value < 0, 1, numbers$value))