我试图到SD功能应用到我的数据帧,但它不工作:应用标准偏差的因素数据帧分割
sdsd <- by(nowna[, 1:16], nowna$stamm, sd)
Error in FUN(X[[1L]], ...) : could not find function "FUN"
你有任何想法,为什么?
非常感谢。
我试图到SD功能应用到我的数据帧,但它不工作:应用标准偏差的因素数据帧分割
sdsd <- by(nowna[, 1:16], nowna$stamm, sd)
Error in FUN(X[[1L]], ...) : could not find function "FUN"
你有任何想法,为什么?
非常感谢。
library(plyr)
dt <- data.frame(age=rchisq(20,10),group=sample(1:2,20,rep=T))
dt
age group
1 9.908015 2
2 11.415043 2
3 7.849433 2
4 8.850696 2
5 6.194783 2
6 11.111339 2
7 9.789127 2
8 10.844352 1
9 8.686503 2
10 21.579142 2
11 11.750417 1
12 3.719226 1
13 12.086820 1
14 13.562351 1
15 4.636543 2
16 12.648083 1
17 10.780387 2
18 10.651318 2
19 5.976533 1
20 13.546345 2
ddply(dt,~group,summarise,mean=mean(age),sd=sd(age))
group mean sd
1 1 10.08397 3.728750
2 2 10.38451 4.082198
另一种使用新包装的单线变体data.table
。
dtf <- data.frame(age=rchisq(100000,10),group=factor(sample(1:10,100000,rep=T)))
dt <- data.table(dt)
dt[,list(mean=mean(age),sd=sd(age)),by=group]
使用Aggregate Function
aggregate(dt$age, by=list(dt$group), FUN=sd)
Group.1 x
1 1 3.728750
2 2 4.082198
如果要计算多个列的标准偏差,您可以使用aggregate
:
aggregate(nowna[1:16], list(nowna$stamm), sd)
sd(nowna[,1:16])
可能不会工作。这将工作:
apply(nowna[,1:16], 2, function(x) by(x, nowna$stamm, sd))
你几乎肯定有一个对象分配到sd
。注意我是如何通过下面的sd
变量分配一个值重新创建错误:
by(warpbreaks[, 1], warpbreaks$wool, sd)
warpbreaks$wool: A
# [1] 15.85143
# ------------------------------------------------------
# warpbreaks$wool: B
# [1] 9.300921
sd <- 5
by(warpbreaks[, 1], warpbreaks$wool, sd)
# Error in FUN(X[[1L]], ...) : could not find function "FUN"
rm(sd)
by(warpbreaks[, 1], warpbreaks$wool, sd)
# warpbreaks$wool: A
# [1] 15.85143
# ------------------------------------------------------
# warpbreaks$wool: B
# [1] 9.300921
您需要rm(sd)
你可以标记你的问题的回答,如果它确实已经回答了。 – RUser