Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么for循环只显示最后一个循环的结果_R_Loops_For Loop_Dataframe - Fatal编程技术网

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

为什么for循环只显示最后一个循环的结果,r,loops,for-loop,dataframe,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) }

我有一个样本矩阵:

  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)

y这应该足够了:

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

y您可以使用
dplyr

library(dplyr)
df1 %>%
   summarise_each(funs(n_distinct)) %>%
   unlist()

我尝试实现您的第一个解决方案,但它对最后一个循环给出了四次正确答案。为了测试这一点,我将第四列更改为第五个唯一值。然后,当我运行您的第一个解决方案时,我得到:[1]5,5,5,5,即使前三个列只有4个值。等等,我想我明白了问题:当我只运行第一个三个列的代码时,它们都有最后一行的空白,它们仍然返回[1 ] 5 5 5。所以我认为空白空间被认为是唯一的值。函数不考虑空间?我尝试在read.csv函数中使用na.strings参数,但unique()仍然认为na是唯一的值。如果需要详细答案,需要显示在输入数据集上运行
dput()
的结果。。。
library(dplyr)
df1 %>%
   summarise_each(funs(n_distinct)) %>%
   unlist()