迭代,ddply和计数

时间:2014-07-09 20:55:07

标签: r loops count plyr

我已经生成了以下数据框:

random <- data.frame(replicate(10, sample(1:12, 564, replace=TRUE)))

它包含10列和564行。 列中的每个数字都与一天(1-12)相关。 在此数据框中,我添加了一个新列,其中包含“Green”,“Pink”和“Red”字样,没有特定的顺序,并使用现有数据填充所有564行:

random <- fruit$color

这是我想做的事情:

对于每列1-10,创建以下计数表:

Day  Green  Pink  Red
1     #     #     #
2     #     #     #
3     #     #     #
4     #     #     #
...   #     #     #
12    #     #     #

因此,我应该能够从这张表中了解第1列第1天果岭的数量。重要的是,来自不同列的颜色计数可以彼此区分。

这是一个有趣的转折!

需要为每种颜色添加第9天和第10天的计数,因此每个表应如下所示:

Day    Green  Pink  Red
1      #     #     #
2      #     #     #
3      #     #     #
4      #     #     #
5      #     #     #
6      #     #     #
7      #     #     #
8      #     #     #
9 - 10 #     #     #
11     #     #     #
12     #     #     #

到目前为止,我已尝试使用ddply和强制执行此操作并循环遍历每个列,但我不熟悉循环。这是我到目前为止的博洛尼亚:

for(i in names(random)) {
random_counts <- ddply(random, c('color', i), function(x) c(count=nrow(x)))
random_counts <- cast(random_counts, i ~ color, mean, value='count')
random_counts
}

非常感谢帮助! 感谢

1 个答案:

答案 0 :(得分:0)

以下是base替代方案:

# slightly smaller toy data
random <- data.frame(replicate(2, sample(1:5, 20, replace = TRUE)))
color <- sample(c("Green", "Pink", "Red"), nrow(random), replace = TRUE)

# use cut to put e.g. 3 and 4 in the same interval  
random[] <- lapply(random, function(x) cut(x, breaks = c(0, 1, 2, 4, 5)))

# count
lapply(random, function(x) table(x, color))

# $X1
#         color
# x       Green Pink Red
#   (0,1]     2    0   1
#   (1,2]     3    0   2
#   (2,4]     3    4   2
#   (4,5]     1    1   1
# 
# $X2
#         color
# x       Green Pink Red
#   (0,1]     3    0   1
#   (1,2]     4    0   1
#   (2,4]     1    3   1
#   (4,5]     1    2   3