#r #dataframe
Вопрос:
У меня есть следующий фрейм данных под названием studenti:
Когда я попытался запустить следующий код:
maschi = data.frame()
indice = 0
for (i in seq_along(studenti$sesso)) {
if (studenti$sesso[i] == "M") {
indice = indice 1
maschi[indice,] <- studenti[i,]
}
}
появилась следующая ошибка «Ошибка в if () { : отсутствует значение, где требуется TRUE/FALSE».
Моя цель состоит в том, чтобы скопировать в фрейм данных maschi только строки фрейма данных studenti таким образом, чтобы sesso=M.
Редактировать
ИЗМЕНИТЬ: вывод dput
structure(list(sesso = c("F", "M", "M", "M", "M"), altezza = c(168,
182, 176, 193, 178), peso = c(60, 75, 72, 95, 68), scarpe = c(41,
43, 45, 45, 45), caso = c(7, 9, 5, 6, 7), matricola = c(1, -1,
-1, -1, 6), mese = c(11, 5, 9, 5, 7), giorno = c(7, 2, 29, 8,
12)), row.names = c(NA, 5L), class = "data.frame")
Комментарии:
1. Данные, которые вы вставили в конце, не читаются, так как все пробелы исчезли. Можете ли вы использовать
dput
, чтобы я получил структуру данных
Ответ №1:
Это может быть проще в использовании subset
maschi <- subset(studenti, sesso == "M")
или filter
от dplyr
library(dplyr)
studenti %>%
filter(sesso == "M")
for
Цикл можно выполнить с помощью rbind
maschi <- studenti[0,]
for(i in seq_len(nrow(studenti))) {
if(studenti$sesso[i] == "M" amp; !is.na(studenti$sesso[i])) {
maschi <- rbind(maschi, studenti[i,])
}
}
Кроме того, в коде операции нам просто нужно
maschi <- studenti[0,]
indice = 0
for (i in seq_along(studenti$sesso)) {
if (studenti$sesso[i] == "M" amp; !is.na(studenti$sesso[i])) {
indice = indice 1
maschi[indice,] <- studenti[i,]
}
}
-выход
> maschi
sesso altezza
2 M 182
3 M 176
4 M 193
-Обновление с использованием данных обновления операции
> maschi
sesso altezza peso scarpe caso matricola mese giorno
2 M 182 75 43 9 -1 5 2
3 M 176 72 45 5 -1 9 29
4 M 193 95 45 6 -1 5 8
5 M 178 68 45 7 6 7 12
данные
studenti <- data.frame(sesso = c("F", "M", "M", "M"), altezza = c(168, 182, 176, 193))
Комментарии:
1. Привет @akrun запрос заключается в создании нового фрейма данных с нуля. Выполняет ли команда maschi
2. @Дженнароаргуцци да, это так. Я предполагаю, что вы хотите связать только строки, в которых есть » M » в » sesso
3. зачем ты написал маски Мне должен понадобиться новый индекс вместо i, чтобы поместить строки одну под другой (см. раздел в моем вопросе).
4. @GennaroArguzzi но, почему вы не хотите делать это легко, вместо того, чтобы делать все окольным путем
5. @GennaroArguzzi ваш код также работает, если у нас просто есть
maschi <- studenti[0,]