我有一个重复数字的向量。我想计算重复数字的数量并打印输出。
这是我的意见:
deg <- c(2, 1, 4, 3, 2, 4, 2, 5, 2, 2, 1, 2)
df <- data.frame(table(deg))
这是我的输出:
deg Freq
1 1 2
2 2 6
3 3 1
4 4 2
5 5 1
这里在我的输出中我想打印从0到5的数据帧,其中0是起始元素,5是向量中的最大元素。我想得到的输出是:
deg Freq
1 0 0
2 1 2
3 2 6
4 3 1
5 4 2
6 5 1
有人请帮帮忙!!!
答案 0 :(得分:1)
试试这个:
df <- data.frame(deg=seq(0,max(deg)),
Freq=sapply(seq(0,max(deg)),function(x) length(which(deg==x))))
输出:
deg Freq
1 0 0
2 1 2
3 2 6
4 3 1
5 4 2
6 5 1
答案 1 :(得分:1)
如果我们从df
开始,我们可以解压缩数据,将零作为因子级别添加,然后重新制表:
f <- with(df, factor(rep(deg, Freq), levels = union(0, levels(deg))))
as.data.frame(table(deg = f))
# deg Freq
# 1 0 0
# 2 1 2
# 3 2 6
# 4 3 1
# 5 4 2
# 6 5 1
如果我们从矢量deg
开始,那就更容易了。我们可以将零作为因子级别添加,然后制表:
f <- factor(deg, levels = union(0, sort(unique(deg))))
as.data.frame(table(deg = f))
# deg Freq
# 1 0 0
# 2 1 2
# 3 2 6
# 4 3 1
# 5 4 2
# 6 5 1
答案 2 :(得分:0)
您可以向df
添加一行:
#convert deg from factor back to numeric
df$deg = as.numeric(as.character(df$deg))
# add 0 deg with 0 freq if it doesn't exist already in df
if (!any(df$deg == 0)) {
df = rbind(df, c(0,0))
# sort df by deg
df = df[order(df$deg),]
}
答案 3 :(得分:0)
试试这个
rbind(data.frame(deg=0, Freq=0)[!(c(0) %in% deg)], as.data.frame(table(deg)))
# deg Freq
# 1 0 0
# 2 1 2
# 3 2 6
# 4 3 1
# 5 4 2
# 6 5 1
答案 4 :(得分:0)
下面的expand_df
功能可以帮助您获得所需的输出
deg = c(2, 1, 4, 3, 2, 4, 2, 5, 2, 2, 1, 2)
df = as.data.frame(table(deg))
expand_df = function(df){
upd_list = 0: max(as.numeric(as.character(df[,1])))
upd_df = as.data.frame(upd_list)
merged_df = merge(upd_df, df,all.x=TRUE,by.x=colnames(upd_df)[1], by.y=colnames(df)[1])
merged_df[,2] = ifelse(is.na(merged_df[,2]),0,merged_df[,2])
merged_df
}
expand_df(df)