我想在R中执行交叉表并计算方法。使用with()执行交叉制表时的警告?
首先,我所选择的变量并创建一个新的数据帧:
seed <- ruk_trial$Ruk_seed_input #integer
soilec <- ruk_trial$Ruk_soilEC #num
ruk_trial$code_smoo[ruk_trial$code_smoo == 0] <- 'US'
ruk_trial$code_smoo[ruk_trial$code_smoo == 1] <- 'LS'
ruk_trial$code_smoo[ruk_trial$code_smoo == 2] <- 'HS'
zones <- ruk_trial$code_smoo #chr
netincome <- ruk_trial$NetIncome #num
yield <- ruk_trial$Dry_yield #num
ruk_df <- as.data.frame(cbind(seed,soilec,zones,netincome,yield))
然后我用()的使用:
with(ruk_df, tapply(netincome, list(zones=zones, seed=seed), mean))
但事实证明:
seed
zones 105 120 75 90
HS NA NA NA NA
LS NA NA NA NA
US NA NA NA NA
There were 12 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In mean.default(X[[i]], ...) :
argument is not numeric or logical: returning NA
如果我使用原始数据集,它的工作原理:
> cross.tab<- with(ruk_trial, tapply(netincome, list(zones=zones,seed=seed), mean))
任何人都可以告诉我什么会导致警告?
你'cbind'是把什么事都一个字符 –
'cbind'返回一个矩阵,矩阵只能有一个数据模式,让您的数字数据被越来越强制转换为字符,然后as.data.frame将这些字符列转换为因子。相反,只需执行'as.data.frame(...)'而不是'as.data.frame(cbind(...))'。 – eipi10
此外,为了计算计数,平均值和其他统计数据,您可能会发现'dplyr'或'data.table'包更方便。例如,在'dplyr'中,按组进行汇总(使用内建的'mtcars'数据框):'library(dplyr); mtcars%>%group_by(am,vs)%>%summarise_all(funs(n(),mean(。)))''。 – eipi10