【问题标题】:R Column for cumulative frequency of a row's particular item行特定项目的累积频率的 R 列
【发布时间】:2017-07-26 11:55:13
【问题描述】:

我正在尝试创建一个列来计算该特定行的值在该点之前的频率。每个矩阵的代码显示当前数据和所需结果。所以对于列矩阵类型 |价值:

test <- matrix(c(
1,0.14,
1,0.1345,
2,1.245,
2,1.532,
3,3.5345,
3,2.987,
2,1.743),ncol=2, byrow=TRUE)

colnames(test) <- c("Type", "Value")

我正在尝试获取与类型列对应的输出频率列:

test <- matrix(c(
1,0.14,1,
1,0.1345,2,
2,1.245,1,
2,1.532,2,
3,3.5345,1,
3,2.987,2,
2,1.743,3),ncol=3, byrow=TRUE)

colnames(test) <- c("Type", "Value","Frequency")

对于在该行中有累积计数之前出现的每个类型总和。 任何帮助,将不胜感激。

【问题讨论】:

  • 你能说明预期的结果是什么吗?
  • 嗨@raistlin。第二个代码块是预期的结果,有一个称为“频率”的额外列,其中包含之前出现的每种类型的计数。

标签: r frequency


【解决方案1】:

您可以使用dplyr 将数据按Type 分组,然后返回每行的行号。因为数据是分组的,所以行号将等于给定值Type 出现的次数。

library(tidyverse)

test %>% 
  tbl_df() %>% 
  group_by(Type) %>% 
  mutate(Frequency = row_number())

【讨论】:

  • 如果有一个日期度量也必须排序,您是否建议按类型对数据进行排序,创建相应的频率值,然后将其重新排序为日期顺序?跨度>
  • 此代码不要求数据按Type排序。请注意样本数据的最后一行。 Type 的值为 2,频率仍将其视为第三次使用 2。
  • 太棒了!非常感谢。
【解决方案2】:

也许这样:

> Frequency<-sapply(1:nrow(test), function(i) sum(test[1:i,1]==test[i,1]))
> cbind(test, Frequency)
     Type  Value Frequency
[1,]    1 0.1400         1
[2,]    1 0.1345         2
[3,]    2 1.2450         1
[4,]    2 1.5320         2
[5,]    3 3.5345         1
[6,]    3 2.9870         2
[7,]    2 1.7430         3

【讨论】:

  • 这是一个非常方便的选择。非常感谢!
猜你喜欢
  • 2019-10-12
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多