我有一些數字數據(value
),它被分組(按Tissue
)。我想爲每組中出現多次的值添加一個小抖動。dplyr:將抖動添加到組中的重複值
輸入:
df <- structure(list(value = c(1.05155243861439,
1.05155243861439, 1.05155243861439, 11.9769249796958, 1.05155243861439,
1.05155243861439, 1.05155243861439, 1.05155243861439, 1.05155243861439
), Tissue = structure(c(5L, 5L, 5L, 4L, 5L, 3L, 5L, 1L, 1L
), .Label = c("Brain", "Marrow", "Spleen", "Testes", "Vis"), class = "factor")), .Names = c("value",
"Tissue"), row.names = c("SM-2", "SM-3", "SM-4", "SM-5",
"SM-6", "SM-7", "SM-8", "SM-9", "SM-10"), class = "data.frame")
我嘗試使用group_by
和mutate
,但這增加了相同的抖動於每個重複的元素每組(一種毫無意義的,是嗎?)。
df <- df %>%
group_by(Tissue, value) %>%
mutate(jitter = ifelse(n()>1, value+runif(1, min=-0.15, max=0.15), value))
輸出:
Source: local data frame [9 x 3]
Groups: Tissue, value [4]
value Tissue jitter
(dbl) (fctr) (dbl)
1 1.051552 Vis 1.1793382
2 1.051552 Vis 1.1793382
3 1.051552 Vis 1.1793382
4 11.976925 Testes 11.9769250
5 1.051552 Vis 1.1793382
6 1.051552 Spleen 1.0515524
7 1.051552 Vis 1.1793382
8 1.051552 Brain 0.9284923
9 1.051552 Brain 0.9284923
第4,6行是正確unjittered。但行[1-3,5,7]
我想有獨特的抖動。來自dplyr
更好的人的任何想法? :(
而不是'runif(1,...)'add'runif(n(),...)'。 – Gregor
@Gregor仍然不能工作,因爲他們由於某種原因而被「Tissue」和「value」分組。雖然僅由'Tissue'進行分組時,它將不起作用,因爲條件長度爲1,因此'ifelse'將總是返回長度爲1的結果。'ifelse'通常很糟糕的原因之一。 –
我會保留最後一句:) –