2016-04-12 2 views
0

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

df <- data.frame(num1 = numeric(), 
       num2 = numeric(), 
       int1 = integer(), 
       chr1 = character(), 
       stringsAsFactors=FALSE) 

filler <- function() { 
    newrow = c(0.1, 0.01, 100, "char") 
    df[nrow(df)+1, ] <- newrow 
    assign(x = "df", value = df, envir = .GlobalEnv) 
} 
filler 

, но ничего не происходит.

Я хотел бы получить следующий вывод:

> df 
    num1 num2 int1 chr1 
1 0.1 0.01 100 char 

Примечание: Я не хочу, чтобы определить новую таблицу в пределах функции, потому что я хочу, чтобы повторно запустить функцию впоследствии с различными «NewRow» значения.

+0

Эта линия будет принуждать все значения 'character' КСТАТИ:' с (0,1, 0,01, 100, " символ ")'. – nrussell

+1

Вы должны передать 'df' в функцию и« вернуть »измененный фрейм данных, чтобы функция вписывалась в парадигму функционального программирования. Или функция не касается кадра данных и просто возвращает 1-строчный кадр данных добавляемой строки. В любом случае просто используйте 'rbind()' внутри функции или вне нее. – Gregor

+0

@ Gregor - ваше решение отлично работало. Благодаря! :) – sandoronodi

ответ

2

Я считаю, что это должно сделать трюк для вас. Я использовал общую строку, чтобы вы могли передавать новые значения в фрейм данных. Вы можете передать вектор значений, выполнив следующие действия: с (значение1, значение2, value3, value4)

df <- data.frame(num1 = numeric(), 
       num2 = numeric(), 
       int1 = integer(), 
       chr1 = character(), 
       stringsAsFactors=FALSE) 

row_attempt <- c(1,2,3,"Master") 

filler <- function(frame_to_attach, my_row){ 
    newrow = my_row 
    data_frame <- rbind(frame_to_attach,my_row) 
    colnames(data_frame) <- colnames(frame_to_attach) 
    return(data_frame) 
} 

z <- filler(df, row_attempt) 
z 
+1

@sandoronodi Вы просто не назначаете результат; этот ответ работает отлично. 'df <- filler (df, row_attempt)' теперь у меня есть одна строка, 'df <- filler (df, row_attempt)' now two, запускать ее столько раз, сколько вам нужно, просто назначьте использование 'df <-' для назначения выход каждый раз. – Gregor