У меня есть этот пример матрицы:Почему цикл только показывает результат последнего цикла
X1 X2 X3 X4
1 F F F F
2 C C C C
3 D D D D
4 A# A# A# A
И я пытаюсь использовать для цикла, чтобы получить число уникальных полей в каждом столбце. Вот как я пытаюсь сделать это:
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 каждый раз, когда он петли, так как я могу создать вектор, который содержит элемент для каждого его цикла?
Я попытался реализации вашего первого решения, но он дал правильный ответ за последний цикл четыре раза. Чтобы проверить это, я изменил четвертый столбец на пятое уникальное значение. Затем, когда я запускаю ваше первое решение, я получаю: [1] 5 5 5 5, хотя первые три столбца имеют только 4 значения. – xxxRxxx
Подождите, я думаю, что я понял проблему: когда я запускаю код только для первых трех столбцов, у которых все пустое место для последней строки, они все равно возвращаются [1] 5 5 5. Поэтому я думаю, что пустое пространство считается уникальным значением. Есть ли способ предотвратить использование уникальной() функции? Я попытался использовать аргумент na.strings в функции read.csv, но unique() все еще считает, что NA является уникальным значением. – xxxRxxx
Если вам нужен подробный ответ, вам нужно показать результаты запуска 'dput()' в вашем наборе входных данных ... –