我想写一个函数,它接受3个参数,并根据参数的值计算平均值。我正在使用的数据帧有3个变量,其中均值使用其中一个并且它包含数值。当我mean(df$v1, na.rm=TRUE)
时,我收到警告:
Warning message:
In mean.default(df$v1, na.rm = TRUE) :
argument is not numeric or logical: returning NA
我尝试mean(df$as.numeric(as.character(v1)), na.rm = TRUE)
Error in mean(df$as.numeric(as.character(v1)), na.rm = TRUE) :
attempt to apply non-function
不确定如何处理此问题。
答案 0 :(得分:1)
如果您收到mean(df$v1, na.rm=TRUE)
的警告,则可能表示您在数据输入中出错,导致数字被强制转换为字符,然后转换为因子。尝试:
str(df$v)
我预测你会发现这是一个因素列。您可以使用以下命令将其更改为数字:
df$v1 <- as.numeric(as.character(df$v1))
答案 1 :(得分:0)
你必须使用
mean(as.numeric(as.character(df$v1)), na.rm = TRUE)
答案 2 :(得分:0)
将因子转换为数字的建议方法是使用级别。来自as.factor帮助文件:
特别是,as.numeric应用于一个因子是没有意义的,并且可能通过隐式强制发生。要将因子f转换为大约其原始数值,建议使用.numeric(levels(f))[f],并且比as.numeric(as.character(f))稍微更有效。
示例:
> x=factor(10:20)
> as.numeric(levels(x))[x]
[1] 10 11 12 13 14 15 16 17 18 19 20
请注意,这在逻辑上与:
相同> x=factor(10:20)
> as.numeric(levels(x))[as.numeric(x)]
[1] 10 11 12 13 14 15 16 17 18 19 20
因为因素是内部整数。