2014-05-12 41 views
-1

我有一个数据框架叫做dataSet并且在那个data.frame中我希望能够引用一个值一个特定的列(因为它是一个重复的值)并按每个值汇总/总计总和。R:想要按列中的值聚合(总计和整个案例的总数)

我知道我可以调用特定的列。例如,要调用第四列数据,我会使用这个。

dataSet[,4] 

如果数据集是这样的:

col1 col2 col3 col4 
3 6 2 1 
5 2 6 2 
5 6 12 3 
4 3 NA 4 
5 2 NA 3 
7 6 NA 1 
6 6 19 4 
9 3 2 1 

我希望能够聚集(GROUP BY,对于那些你们谁知道SQL)的COL4值。

一,(我选择任何一列)的总和,说COL4在这种情况下。但理想情况下,我可以将列作为变量并从任何列中调用值。

所以我会为总和 COL1答案为COL4的每个公共价值,像这样:

col1 col4 
19  1 
5  2 
10  3 
10  4 

二,完成案件的数量,作为标志着由“数量”一栏。

count col4 
2 1 
1 2 
1 3 
1 4 

作为R的新手,我发现如何在列中引用(或调用)特定值是很困难的。我有一个dataframe [i,j]的参考部分,其中i = row,j = col。我想一个三级的问题是,我在哪里可以了解更多关于如何使列和值引用(或电话)到R内的所有对象(例如列表,data.frames)

回答

0

这样的事情?

d <- structure(list(col1 = c(3L, 5L, 5L, 4L, 5L, 7L, 6L, 9L), col2 = c(6L, 
2L, 6L, 3L, 2L, 6L, 6L, 3L), col3 = c(2L, 6L, 12L, NA, NA, NA, 
19L, 2L), col4 = c(1L, 2L, 3L, 4L, 3L, 1L, 4L, 1L)), .Names = c("col1", 
"col2", "col3", "col4"), class = "data.frame", row.names = c(NA, 
-8L)) 

library(reshape) 
d1 <- melt.data.frame(d, id = 'col4') 
d1$variable <- as.character(d1$variable) 
head(d1) 
     col4 variable value 
1 1  col1  3 
2 2  col1  5 
3 3  col1  5 
4 4  col1  4 
5 3  col1  5 
6 1  col1  7 
library(dplyr) 
d1 %.% 
    group_by(variable, col4) %.% 
    summarise(
    s = sum(value, na.rm = T), 
    c = length(na.omit(value))) 
Source: local data frame [12 x 4] 
Groups: variable 

    variable col4 s c 
1  col1 1 19 3 
2  col1 2 5 1 
3  col1 3 10 2 
4  col1 4 10 2 
5  col2 1 15 3 
6  col2 2 2 1 
7  col2 3 8 2 
8  col2 4 9 2 
9  col3 1 4 2 
10  col3 2 6 1 
11  col3 3 12 1 
12  col3 4 19 1 
+0

我不太清楚这是走向的方向。下面的答案符合我正在寻找的方向。一个用于根据col4对一列(Col1)进行求和。 第二部分将计算complete.cases。 – Paul

+0

这就是你用这些方法得到的结果。去尝试一下。您的计数可能不正确。试用@ samhiggins2001提出的表格解决方案和我的代码。 –

+0

这可能是我头上的一点点(欣赏它虽然 - 拉伸我)。我无法在d1函数中获得'd'。我假设这是我的目录或data.frame是否正确? 我得到这个错误: – Paul

1

您可以使用aggregate函数查找值的列1总和为column4每个独特的价值。 (对于这个函数文档可以通过在R命令提示输入help(aggregate)中找到)的语法是这样的:

aggregate(x=dataSet$col1, by=list(dataSet$col4), FUN=sum) 

或,给出相同的结果:

aggregate(x=dataSet[,"col1"], by=list(dataSet[,"col4"]), FUN=sum) 

孤男寡女得到listby参数aggregate似乎有点奇怪我在第一,但它可以让你以组提供多个字段您的值通过(与参数x通过),因此相当于SQL的group by条款。

要查找某列中的某个值出现的数,您可以使用table功能:

table(dataSet$col4) 

,或者给予同样的结果:

table(dataSet[,"col4"])