Удаление NA основано на конкретном состоянии [дубликат]

Вероятно, вы хотите использовать JSON list вместо словаря в качестве элемента верхнего уровня.

Итак, инициализируйте файл пустым списком:

with open(DATA_FILENAME, mode='w', encoding='utf-8') as f:
    json.dump([], f)

Затем вы можете добавить новые записи в этот список:

with open(DATA_FILENAME, mode='w', encoding='utf-8') as feedsjson:
    entry = {'name': args.name, 'url': args.url}
    feeds.append(entry)
    json.dump(feeds, feedsjson)

Обратите внимание, что это будет медленным, потому что вы перепишете полное содержимое файла каждый раз, когда вы вызываете add. Если вы вызываете его в цикле, подумайте о том, чтобы добавить все каналы в список заранее, а затем записать список за один раз.

7
задан Henrik 14 June 2017 в 15:06
поделиться

4 ответа

Это вернет набор данных, где не более двух значений для каждой строки:

dfrm[ apply(dfrm, 1, function(r) sum(is.na(x)) <= 2 ) , ]
1
ответ дан 42- 17 August 2018 в 09:23
поделиться

Если d является вашим фреймом данных, попробуйте следующее:

d <- d[rowSums(is.na(d)) < 2,]
2
ответ дан Blue Magister 17 August 2018 в 09:23
поделиться

Используйте rowSums. Чтобы удалить строки из фрейма данных (df), которые содержат точно значения n NA:

df <- df[rowSums(is.na(df)) != n, ]

или для удаления строк, содержащих n или больше NA:

df <- df[rowSums(is.na(df)) < n, ]

в обоих случаях, конечно, заменив n на требуемое число

13
ответ дан Hugh 17 August 2018 в 09:23
поделиться
  • 1
    +1 для использования n. Возможно, вы захотите объяснить, что означает слово n. – Ricardo Saporta 8 August 2013 в 02:34
  • 2
    Это создает новый столбец с именем row.names в df, почему? Это одно из явлений R, которые я просто не понимаю. Иногда функции выводят лишние вещи, которых я не ожидаю. – Rhubarb 4 December 2013 в 12:17

Если dat - имя вашего файла data.frame, то возвращается то, что вы ищете:

keep <- rowSums(is.na(dat)) < 2
dat <- dat[keep, ] 

Что это делает:

is.na(dat) 
# returns a matrix of T/F
# note that when adding logicals 
# T == 1, and F == 0

rowSums(.)
# quickly computes the total per row 
# since your task is to identify the
# rows with a certain number of NA's 

rowSums(.) < 2 
# for each row, determine if the sum 
# (which is the number of NAs) is less
# than 2 or not.  Returns T/F accordingly 

Мы используем вывод этого последнего оператора, чтобы определить, какие строки сохранить. Обратите внимание, что нет необходимости фактически сохранять этот последний логический.

4
ответ дан Ricardo Saporta 17 August 2018 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: