簡體   English   中英

summaryBy 和很多變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM