按数据集中不存在的因素分组
Grouping by factor absent in dataset
我正在使用 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 的类别?
例如
result (for file 1):
mode | no.cases
1 3
2 1
3 0
4 0
5 2
提前致谢,p.
假设您已将完整文件中的所有类别放入名为 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 与您的文件 1
合并的示例代码
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
希望对您有所帮助。
我正在使用 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 的类别?
例如
result (for file 1):
mode | no.cases
1 3
2 1
3 0
4 0
5 2
提前致谢,p.
假设您已将完整文件中的所有类别放入名为 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 与您的文件 1
合并的示例代码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
希望对您有所帮助。