birlikte çalıştığım öneriyoruz tidy veri formu. İşte dplyr bir yaklaşım, ama tekrarlanabilir örnek kılmak için rastgele tohum ayarı, ben veri kümesi yaratacağız data.table veya baz R.
İlk çevirmek için önemsiz olacaktır:
set.seed(1014)
df <- data.frame(
id = 1:8,
group = c(1, 0, 0, 1, 1, 0, 1, 0),
rep = c(rep("d1", 4), rep("d2", 4)),
value = rbinom(8, 1, 0.6)
)
df
%> id group rep value
%> 1 1 1 d1 1
%> 2 2 0 d1 0
%> 3 3 0 d1 0
%> 4 4 1 d1 1
%> 5 5 1 d2 1
%> 6 6 0 d2 1
%> 7 7 1 d2 1
%> 8 8 0 d2 1
Sonraki, dplyr kullanarak, ilk grup tarafından tek tek satırların yanında daraltmak edeceğiz ve sonra kümülatif toplamını hesaplamak:
library(dplyr)
df <- df %>%
group_by(group, rep) %>%
summarise(value = sum(value)) %>%
mutate(csum = cumsum(value))
df
%> Source: local data frame [4 x 4]
%> Groups: group
%>
%> group rep value csum
%> 1 0 d1 0 0
%> 2 0 d2 2 2
%> 3 1 d1 2 2
%> 4 1 d2 2 4
çoğu durumda, sen leav en iyileridir Bu formdaki verileri ing (o çalışmak için daha kolay olacaktır), ancak gerekirse yeniden şekillendirmek olabilir:
library(reshape2)
dcast(df, group ~ rep, value.var = "csum")
%> group d1 d2
%> 1 0 0 2
%> 2 1 2 4
'cumsum' bir işlevdir. '? Cumsum' yazın. Benzer işlevlere ('' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ile '' '' '' '' '' '' '' '' '' '' '' '' '' 'yani' '(df $ değeri, df $ grubu, cumsum)' d tek yönlü – Frank
Demoyu kullanarak cevap verebilir misiniz? +1 –
Hepsini bir veri çerçevesinde elde etmek için: 'do.call (rbind, by (df $ değer, df $ grubu, cumsum))' – josliber