Поток управления: как получить данные для отображения, а не индекс - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть код ниже, который я пытаюсь зациклить условие.Я продолжаю получать индексы фрейма данных вместо элементов (что я и хочу) фрейма данных.

airport <- airport_data
for (i in 1:135) {
    if (airport$Scheduled[i] < airport$Performed[i])
        print(i)
}

Airport          City      Scheduled  Performed
HARTSFIELD INTL  ATLANTA   280003     298003
BALTI INTL       BALTIMOR  56001      59000

Ответы [ 3 ]

0 голосов
/ 20 сентября 2019

Хорошо, теперь у меня есть лучшее представление о том, что вы хотите, я на самом деле думаю, что вам лучше использовать фильтр (из библиотеки (dplyr)).Убедитесь, что и аэропорт $ запланирован, и аэропорт $ выполнен в числовой форме.

new_df <- filter(airport, airport$Scheduled < airport$Performed)
0 голосов
/ 20 сентября 2019

Если вы хотите объединить строки, вы не должны их печатать.Я понимаю, что вы пытаетесь тренироваться для циклов, но когда вы работаете с матрицами или данными, вы хотите использовать векторизованные операции, а не работать над строкой одна за другой.

Векторизованные операции оптимизированы, чтобы быть намного быстрее, чем типичный цикл for, и вы всегда должны пробовать векторизованное решение на языке, подобном R или Matlab.

airport[airport$Scheduled < airport$Performed,]

Это, как говорится, еслиВы действительно хотите сделать это с помощью цикла for и хотите «объединить» строки, вы можете просто rbind их:

result <- data.frame() # empty frame
for (i in 1:135) {
    if (airport$Scheduled[i] < airport$Performed[i])
        result <- rbind(result, airport[i,])
}
0 голосов
/ 20 сентября 2019

Трудно дать однозначный ответ, не видя ваш фрейм данных, но лучший способ - указать, какой столбец вы хотите, чтобы цикл запускался ниже - например, если вы хотите, чтобы цикл запускался во втором столбце вашего фрейма данных,код будет:

airport <- airport_data
for (i in 2:ncol(airport){
if (airport$Scheduled[i]<airport$Performed[i])
print(i)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...