按数据集

时间:2015-06-10 10:12:50

标签: r group-by dplyr

我正在使用dplyr来计算一系列文件的变量[mode]的分组。目标是构建一个数据框,您可以在其中复制(cbind)每个文件的结果(欢迎更好的数据结构的任何想法)。

所以文件是这样的:

FILE 1:
id |mode | no.cases
1    1      3
2    2      1
3    5      2

FILE 'n':
id |mode | no.cases
1    1      11
2    3      7
3    4      1

某些文件可能包含所有5个类别的条目,其他文件仅包含2个或3个类别的条目。我可以使用以下方法从完整文件中获取所有现有类别:  categories<-factor(mode)

但是,使用group_by时会出现问题:

result <-group_by(file,mode,sum(no.cases))    
result (for file 1):
mode | no.cases
1      3
2      1
5      2
因为你不能在不同的问题上找到答案。行:在某些情况下,结果数据框将有5行,有些只有3行。

如何使用group_by,以便为每个文件显示所有现有类别,以及缺少显示值0的类别?

E.g。

result (for file 1):
mode | no.cases
1      3
2      1
3      0
4      0
5      2

提前致谢,p。

1 个答案:

答案 0 :(得分:1)

假设您已将完整文件中的所有类别放入名为categories.df

的数据框中
categories <- c(1,2,3,4,5)
# create data frame
categories.df <- data.frame(categories)
# rename column name
colnames(categories.df)[colnames(categories.df)=="categories"] <- "mode"

> categories.df
  mode
    1
    2
    3
    4
    5

以下是将categories.df与您的file1

合并的示例代码

R代码:

# Method 1: merge function
df <- merge(x = categories.df, y = file1, by = "mode", all = TRUE)
df$id <- NULL # remove id
df[is.na(df)] <- 0 # replace na with zero

# Method 2: using dplyr
library(dplyr)
df <- left_join(categories.df, file1)
df$id <- NULL # remove id
df[is.na(df)] <- 0 # replace na with zero

# Method 2: using plyr
library(plyr)
df <- join(categories.df, file1, type="left")
df$id <- NULL # remove id
df[is.na(df)] <- 0 # replace na with zero

输出:

> df
  mode no.cases
    1        3
    2        1
    3        0
    4        0
    5        2

希望这有帮助。