0

我想在集合中绘制一些数据,其中 x 的频率随时间 y 以年为单位。我已经能够将数据操作到一个数据框中,在其中我有某些二进制字符串数据的频率。就像目前一样,我每年都有两条线的频率,以绘制不同二元结果的频率。但是,我想按年份绘制这些观察总数的百分比。

df <- data.frame( x = c("1980", "1980", "1981", "1981", "1982", "1982" ),
             y = c("yes", "no", "yes", "no", "yes", "no"),
             z = c("26", "18", "32", "12", "18", "16"))

最初,我通过按年份汇总观察结果来尝试使用此代码,但是当我需要 64 行数据时,它只有 32 行数据。

df1$Sum <- aggregate(df1$z, by=list(df1$x), FUN=sum)

有没有办法按年复制观察结果,以便在新列中包含 1980 年第 1 行和第 2 行的“是”和“否”的总和?

4

2 回答 2

1
library(data.table)
dt = data.table(your_df)

dt[, z.sum := sum(z), by = x]

假设您的 z 列实际上是数字,在 OP 中并非如此,但我认为这是一个错字。

于 2013-09-13T20:09:16.170 回答
0

如果您的目标是“按年份绘制这些观察总数的百分比”,我假设您不必通过总和。

这是获得每年百分比的一种可能性:

library(plyr)
df <- data.frame( x = c("1980", "1980", "1981", "1981", "1982", "1982" ),
                  y = c("yes", "no", "yes", "no", "yes", "no"),
                  z = c("26", "18", "32", "12", "18", "16"))
df$z <- as.numeric(as.character(df$z))

df2 <- ddply(.data = df, .variables = .(x), mutate,
             prop = z/sum(z))
df2
于 2013-09-13T20:24:13.093 回答