2014-08-15 4 views
0

Я хотел бы создать очень простую функцию, которая будет принимать номер данных и номер строки в качестве аргументов, а затем возвращать dataframe без этой строки. Так что, если у меня есть:Удалите строку за номером строки в dataframe

1 ben 
2 adrian 
3 bill 
4 matthew 

После вызова удаления (3, ДФ) я получаю:

1 ben 
2 adrian 
3 matthew 

Любой человек может помочь?

+0

Вы осведомлены о том, что вы можете использовать, например, 'df [-3,]', чтобы удалить строку 3 из вывода? (или в случае удаления нескольких строк: 'df [-c (1: 2),]')? –

+0

@beginneR, ему понадобится ', drop = F', чтобы сохранить его в структуре' data.frame', но это в основном –

+0

хороший catch, @DavidArenburg. –

ответ

2

Похоже, это все, что вам действительно нужно

> removeRows <- function(rowNum, data) { 
     newData <- data[-rowNum, , drop = FALSE] 
     rownames(newData) <- NULL 
     newData 
    } 
> dat 
#  V2 
# 1  ben 
# 2 adrian 
# 3 bill 
# 4 matthew 
> removeRows(3, dat) 
#  V2 
# 1  ben 
# 2 adrian 
# 3 matthew 
1

Если df является набором данных

fun1 <- function(data, rowN){ 
indx <- !(seq_len(nrow(data)) %in% rowN) 
data1 <- data[indx,, drop=F] 
row.names(data1) <- seq_len(nrow(data1)) 
data1 
} 

fun1(df, 3) 
#  V1 
#1  ben 
#2 adrian 
#3 matthew 

fun1(df,1:2) 
#  V1 
#1 bill 
#2 matthew 
+1

Почему вы используете 'row.names' здесь? Все, что он хочет, это номер строки. Вполне возможно, что 'row.names' не будет соответствовать номеру строки. Я не думаю, что в этой функции требуется больше данных, чем 'data [-rowN ,, drop = F]'. –

+0

@David Arenburg, я изменил row.names на '1: nrow (data)'. Да ты прав. могут быть случаи с разными именами ростов. – akrun

+0

@beginneR. Вы абсолютно правы. Спасибо за ваши комментарии. Обновлен код. – akrun

3

Эта функция может быть записана в виде одной строки (хотя и без проверки ошибок):

remrow <- function(x, rows) x[-rows,, drop = FALSE] 

Вот ваши данные:

dat <- data.frame(A = 1:4, B = 5:8) 
rownames(dat) <- c("ben", "adrian", "bill", "matthew") 

remrow(dat, 2) вычеркнет строку «Адриана», а remrow(dat, 1:2) удалит строки «ben» и «adrian».

Отметьте, что is.data.frame(remrow(dat, 1)) оценивает по TRUE.

Смежные вопросы