2016-03-01 104 views
1

這是一個關於apply的使用問題。這種性質的問題已經得到解答純屬巧合。我不是在尋找最簡單的方法來做到這一點(這會使它成爲重複)。我寫了一些可以用循環解決的東西。我正在尋找如何使用apply來寫我的問題。如何在R中使用apply而不是循環

在R中,我很難擺脫總是使用循環的習慣。這是我寫的基本示例腳本。它會獲取數據並說明表格中每個唯一編號的頻率。如果可能,我可以通過應用完成相同的工作?

x <- c(1,3,4,7,8,10,1,2,3,4,4,6,7,8,8,1,2,3,7,8) 
y <- data.frame(x) 
z <- data.frame(unique(y)) #finds unique values 
i <- nrow(z) #nrow for loop length 

id <- 1:i 
repped <- data.frame() 
for (i in id){ 
    zz <- y[which(y[,1] == z[i,]),] #takes each value from z and finds rows with identical values 
value <- length(zz) 
repped <- rbind(repped, value) 
} 

yy <- data.frame(z, repped) 
colnames(yy) <- c("number", "frequency") 

回答

2

我們可以使用table得到「Y」的頻率和data.frame

as.data.frame(table(y)) 

包裹它,如果我們需要一個apply家庭功能

data.frame(z=unique(y$x),repped= sapply(unique(y$x), 
     function(i) sum(y$x==i))) 
+0

這是一個非常有用的功能你剛剛告訴我。我現在知道我的方法有多複雜,但我明確的問題是,在這種情況下我將如何使用apply來代替循環? – Andrew

+0

@Andrew更新了申請家庭功能 – akrun

+3

如果你想擺脫使用循環的習慣,那麼不要養成使用'apply'的新習慣。相反,養成一種向量化你的代碼的習慣。 –

相關問題