【发布时间】:2016-03-18 18:40:49
【问题描述】:
我想将 IF 语句应用于多个列(基本上是整个数据框),并且正在采用创建函数的方法来执行此操作。目的是用代表该数字所属组的数字替换列中的数据。
数据样本如下所示:
> Mat
A B C D E
E1 8.45 6.65 7.35 5.18 3.11
E2 12.59 4.18 4.08 0.95 1.75
E3 15.93 3.05 1.81 2.77 4.42
E4 15.93 3.05 1.81 2.77 4.42
E5 11.57 4.48 4.70 2.01 1.08
E6 8.17 7.05 7.70 5.38 3.45
E7 11.57 4.48 4.70 2.01 1.08
E8 9.49 5.41 6.51 5.78 3.20
E9 11.71 4.40 4.58 1.87 1.11
E10 9.52 5.49 6.63 6.07 3.49
我尝试创建的函数将采用 IF 语句并查看列中的每个值,并根据值将其替换为从 1 到 6 的组号(对于 1 到 10 之间的数字)和 NA对于大于 10 的数字。当我为 ONE 列手动写出 IF 语句时,它本身就起作用了。我写的函数是这样的(称为Grouping):
# write user function to apply the loop
Grouping = function(data) {
for(i in 1:length(x)) {
if(x[i] < 1) {
x[i] = 1
} else if (x[i] < 3) {
x[i] = 3
} else if (x[i] < 4) {
x[i] = 4
} else if (x[i] < 5) {
x[i] = 5
} else if (x[i] < 10) {
x[i] = 6
} else
x[i] = "NA"
}
}
当我尝试将apply 与函数一起使用时,我的错误是:
> apply(Mat, 1, Grouping)
Error in FUN(newX[, i], ...) : object 'x' not found
很明显,问题出在我的用户函数的构造中,但我不确定我哪里出错了,因为我对函数创建很陌生。
感谢任何帮助!
谢谢!
【问题讨论】:
-
for(i in 1:length(x))导致此问题:Error in FUN(newX[, i], ...) : object 'x' not found。 -
看起来你的函数
Grouping()不知道x是什么。这是因为当您定义函数时,您将函数的参数命名为data。将其更改为x,您应该一切就绪。 -
有道理,谢谢!
标签: r function if-statement apply