计算相同值的数量并在R中打印它们

时间:2017-09-15 20:56:32

标签: r dataframe

我有一个重复数字的向量。我想计算重复数字的数量并打印输出。

这是我的意见:

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

有人请帮帮忙!!!

5 个答案:

答案 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)