2017-09-15 31 views
1

我有一個具有重複數字的向量。我想計算重複數字的數量並打印輸出。計數相同值的數量並在R中打印

這是我的輸入:

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

您可以添加一行到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),] 
} 
+0

如果我的「deg」數組中有0,該怎麼辦?它會返回0度和1頻率? – cvk533

+0

我原來的答案會,但我編輯我的答案只添加它,如果不存在。 –

+0

我收到下面的錯誤:df $ deg中的錯誤:'closure'類型的對象不是子集合 – cvk533

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 
+0

非常整齊!我可以推薦'df < - data.frame(deg = seq(0,max(deg)),Freq = sapply(seq(0,max(deg)),function(x)length(which(== == x) ))),所以它可以作爲任何向量的一般解,(例如'deg = c(2,1,4,3,2,4,2,5,2,2,1,2,7) ') – raninjan

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