簡體   English   中英

R dplyr:最小值最大值功能在mutate中不起作用

[英]R dplyr: min max function not working in mutate

我無法解決dplyr的問題。 我也沒有一個完整的可行示例,因為該問題僅出現在整套數據(我無法與您共享)上。

我執行以下操作:

t %>% group_by(id, add=TRUE) %>% 
  summarise(minbplevel = min(ref, na.rm=T)
       ,maxbplevel = max(ref, na.rm=T)
       ) %>% filter(id %in% c(caseA,caseB))

導致

id         minbplevel maxbplevel
(dbl)      (dbl)      (dbl)
1 B            33.0       73.0
2 A            39.4       80.4

但是當我這樣做

t %>% group_by(id, add=TRUE) %>% 
mutate(minbplevel = min(ref, na.rm=T)
       ,maxbplevel = max(ref, na.rm=T)
       ) %>% filter(id %in% c(caseA,caseB))

結果是:

   id   Level refparmax refparmin   ref meanbptest minbplevel maxbplevel
(dbl)   (chr)     (int)     (int) (dbl)      (dbl)      (dbl)      (dbl)
1  B          0SD        69        68  49.0   52.00000         33         73
2  B       min1SD        69        68  41.0   52.00000         33         73
3  B       min2SD        69        68  33.0   52.00000         33         73
4  B      plus1SD        69        68  59.0   52.00000         33         73
5  B      plus2SD        69        68  73.0   52.00000         33         73
6  A          0SD       100        95  56.4   35.33333         NA         NA
7  A       min1SD       100        95  47.4   35.33333         NA         NA
8  A       min2SD       100        95  39.4   35.33333         NA         NA
9  A      plus1SD       100        95  67.4   35.33333         NA         NA
10 A      plus2SD       100        95  80.4   35.33333         NA         NA

為什么要生產A的NA,我一無所知。 似乎每次我對數據的子集進行嘗試時,出現數據的第二種情況就是問題所在,但這只是預感。 只有18850的一種情況會出現此問題,但沒有可識別的問題使此問題與其他情況有所不同。

請告知我可以嘗試解決的方法? 我可以考慮解決方法,創建匯總數據,然后將結果與原始數據合並。 但是我認為dplyr可以讓我一步一步地做到這一點。

我嘗試刪除或添加add = TRUE選項。 那沒有任何區別。

也許我用錯了方式。


根據評論,我嘗試過:

subset(with(t,aggregate(ref~id, t, FUN= min, na.rm=TRUE, na.action= na.pass)),id %in% c(caseA,caseB))

導致

      id  ref
4 B 33.0
5 A 39.4

我必須掩蓋數據的某些部分。

dput(head(subset(t,id %in% c(caseA,caseB)) , 12))

給出:

我再次用變量caseB和caseA替換了實際的ID。 同樣,這也不是發生問題的完整數據集。

structure(list(id = c(caseB, caseB, caseB, caseB, caseB, 
caseA, caseA, caseA, caseA, caseA), Level = c("0SD", "min1SD", 
"min2SD", "plus1SD", "plus2SD", "0SD", "min1SD", "min2SD", "plus1SD", 
"plus2SD"), refparmax = c(69L, 69L, 69L, 69L, 69L, 100L, 100L, 
100L, 100L, 100L), refparmin = c(68L, 68L, 68L, 68L, 68L, 95L, 
95L, 95L, 95L, 95L), ref = c(49, 41, 33, 59, 73, 56.4, 47.4, 
39.4, 67.4, 80.4), meanbptest = c(52, 52, 52, 52, 52, 35.3333333333333, 
35.3333333333333, 35.3333333333333, 35.3333333333333, 35.3333333333333
)), .Names = c("id", "Level", "refparmax", "refparmin", "ref", 
"meanbptest"), class = c("grouped_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -10L), vars = list(id), drop = TRUE, indices = list(
    0:4, 5:9), group_sizes = c(5L, 5L), biggest_group_size = 5L, labels = structure(list(
    id = c(caseB, caseA)), class = "data.frame", row.names = c(NA, 
-2L), vars = list(id), drop = TRUE, .Names = "id"))

如果我將ref列中的所有NA都替換為零,則mutate步驟工作正常。 正如aosmith所建議的,這可能與dplyr的開發版本中修復的mutate和NA問題有關。

由於工作站的限制,我無法測試此建議。 因此,我將使用NA替換步驟解決該問題,並在摘要步驟之后處理零值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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