为什么循环只显示最后一个循环的结果

时间:2015-04-11 23:20:09

标签: r loops for-loop dataframe

我有这个样本矩阵:

  X1 X2 X3 X4
1  F  F  F  F
2  C  C  C  C
3  D  D  D  D
4 A# A# A#  A

我尝试使用for循环来获取每列中唯一音高的数量。以下是我尝试这样做的方法:

y <- read.csv(file)
frame <- data.frame(y)
for(i in 1:4){
specframe <- frame[, i]
x <- unique(specframe)
         }
     length(x)

但是长度的结果只是4.我要查找的输出是4个元素的向量,其中每个元素详细说明了各自列中唯一元素的数量。看起来for循环在每次循环时都会重写x,那么如何在每次循环时创建一个包含元素的向量?

2 个答案:

答案 0 :(得分:4)

这应该足够了:

y <- read.csv(file)
x <- numeric(4)
for(i in 1:4) {
    x[i] <- length(unique(y[, i]))
}

或:

x <- apply(y,2,function(x) length(unique(x)))

答案 1 :(得分:1)

您可以使用n_distinct

中的length(unique(dplyr封送器)
library(dplyr)
df1 %>%
   summarise_each(funs(n_distinct)) %>%
   unlist()