为什么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()