【问题标题】:count frequency based on values in 2 or more columns根据 2 列或更多列中的值计算频率
【发布时间】:2013-06-04 05:04:25
【问题描述】:

我有一个非常简单的问题,但我想不出不使用 if 语句的方法

我的数据看起来像:

df <- structure(list(years = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), id = c(1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), x = structure(c(2L, 
1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 
1L), .Label = c("E", "I"), class = "factor")), .Names = c("years", 
"id", "x"), class = "data.frame", row.names = c(NA, -18L))

所以表格看起来像:

   years id x
1      1  1 I
2      2  1 E
3      3  1 E
4      1  1 E
5      2  1 I
6      3  1 I
7      1  2 I
8      2  2 E
9      3  2 I
10     1  2 E
11     2  2 E
12     3  2 I
13     1  3 I
14     2  3 E
15     3  3 I
16     1  3 I
17     2  3 I
18     3  3 E

我希望输出报告每个 id 和每年的 x 的分数为“I”:

   years id xnew
1      1  1 0.5
2      2  1 0.5
3      3  1 0.5
4      1  2 0.5
5      2  2 0.0
6      3  2 1.0
7      1  3 1.0
8      2  3 0.5
9      3  3 0.5

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 抱歉不清楚,我已经编辑了我的问题以包含 df 表

标签: r count frequency multiple-columns


【解决方案1】:
aggregate(x ~ years + id, data=df, function(y) sum(y=="I")/length(y) )

  years id   x
1     1  1 0.5
2     2  1 0.5
3     3  1 0.5
4     1  2 0.5
5     2  2 0.0
6     3  2 1.0
7     1  3 1.0
8     2  3 0.5
9     3  3 0.5

【讨论】:

  • @user2303635 - 如果这行得通,通常会在答案旁边打勾绿色箭头,以便其他人知道这是一个合适的解决方案。很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-11-24
  • 2017-07-25
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多