[英]summaryBy and lots of variables
我想使用 summaryBy 並使用三個分組變量(公式的右側),但要匯總 170 個左右的變量(在我的情況下計算中位數)。 如何在同一個公式中指定它們?
而不是打字
var1+var2+var3...
等等。我想我可以做一個這樣的字符串。 這本身就是一個完整的項目,但至少我現在存儲了一個字符串,其中包含中間帶有加號的所有變量。 我稱之為z1
。
現在,在我的 summaryBy 腳本中簡單地要求z1
甚至paste(z1)
不起作用:
d <- summaryBy(paste(z1) ~ year + month + ID,
data=..,
FUN=c(median,sum),
na.rm=TRUE)
給出錯誤:
tapply(currVAR, rh.string.factor, function(x) { 中的錯誤:
參數必須具有相同的長度
我想這與總結我指定我的數據的事實有關。 但我是 R 的新手,因此無法理解除此之外的問題。
我也嘗試了不同的方法,如建議的那樣:
d<-summaryBy(paste(z1,"~year+month+ID"),
data=..,
FUN=c(median,sum),
na.rm=TRUE)
這反而給出了錯誤
.get_variables(formula, data, id, debug.info) 中的錯誤:“formula”必須是公式或列表
所以不確定如何去那里。
從幫助文檔:
使用 cbind( ) summaryBy(cbind(Weight, Feed) ~ Evit + Cu, data=subset(dietox, Time > 1), FUN=fun) 完成對幾個變量的計算
並對此進行測試,這次 z2 是由逗號分隔的所有變量的字符串。
d<-summaryBy(cbind(z2)~year+month+ID,
data=..,
FUN=c(median,sum),
na.rm=TRUE)
或變異
d<-summaryBy(cbind(paste(z2))~year+month+ID,
data=..,
FUN=c(median,sum),
na.rm=TRUE)
兩者都給出了我在上面的原始嘗試中的參數長度錯誤。
另一個建議(感謝@akrun):
d<-summaryBy(as.formula(paste(z1,"~year+month+ID")),
data=..,
FUN=c(median,sum),
na.rm=TRUE)'
提醒: z1
是中間有加號的變量。
在這種情況下,R 不會出錯。 它似乎正在加載或等待其他命令。 控制台如下所示:控制台屏幕截圖底部沒有>
.. 那是什么意思?
as.formula
方法奏效了! 非常感謝! 我現在明白,如果控制台底部沒有箭頭,就像我上面的截圖一樣,這意味着 R 正在計算哈哈。
問題是paste
只是圍繞感興趣的變量。 有可能
library(doBy)
summaryBy(as.formula(paste(z1, "~ year + month + ID")),
data=..,
FUN=c(median,sum),
na.rm=TRUE)
在哪里
z1 <- paste0('var', 1:3, collapse=" + ")
使用來自?summaryBy
的可重現示例
data(dietox)
dietox12 <- subset(dietox,Time==12)
fun <- function(x){
c(m=mean(x), v=var(x), n=length(x))
}
out1 <- summaryBy(cbind(Weight, Feed) ~ Evit + Cu, data=dietox12,
FUN=fun)
out2 <- summaryBy(Weight + Feed ~ Evit + Cu, data=dietox12,
FUN=fun)
z2 <- paste(c("Weight", "Feed"), collapse=" + ")
out3 <- summaryBy(as.formula(paste(z2, "~ Evit + Cu")), data=dietox12,
FUN=fun)
identical(out1, out2)
#[1] TRUE
identical(out1, out3)
#[1] TRUE
所以,感謝@akrun,下面的代碼現在可以工作了:
d<-summaryBy(as.formula(paste(z1,"~year+month+ID")),
data=..,
FUN=c(median,sum),
na.rm=TRUE)
我一開始認為沒有的原因是因為計算時間太長了! 畢竟這是一個龐大的數據集。 編輯了我的原始帖子,但將我所有的嘗試都留在了那里,包括關於“缺少箭頭”的問題,我現在明白這意味着 R 正在工作。 難的。 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.