我有下面的数据集,想计算在一个向量中某个条件发生了多少次:
structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L), Stimuli = c(1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L,
0L, 1L)), .Names = c("ID", "Stimuli"), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -12L), spec = structure(list(
cols = structure(list(ID = structure(list(), class =
c("collector_integer",
"collector")), Stimuli = structure(list(),
class = c("collector_integer",
"collector"))), .Names = c("ID", "Stimuli")), default = structure(list(),
class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"))
仅对每个ID单独计数,并且仅当Stimuli的值为1时。结果将在额外的一行中汇总,如下所示:
ID Stimuli Count
1 1 1
1 0 0
1 0 0
1 1 2
2 1 1
2 1 2
2 0 0
2 1 3
3 0 0
3 1 1
3 0 0
3 1 2
我知道as.data.frame(table(df))
用于获取频率,但在这种情况下,我想保留每行,并且只在每个ID序列中计数。
3条答案
按热度按时间41ik7eoe1#
我们可以使用基于
ifelse
条件的group_by
累积和(cumsum
),其中“Stimuli”为1或者另一个选项是
data.table
或使用
base R
中的ave
mklgxw1f2#
您可以使用
data.table
包:wr98u20j3#
只使用基本的
R
,有点复杂。我将命名为dfdat
。