[r] R의 데이터 프레임에 행을 추가하는 방법은 무엇입니까?

R에서 데이터 프레임이 이미 초기화 된 후 데이터 프레임에 새 행을 어떻게 추가합니까?

지금까지 나는 이것을 가지고있다 :

df <- data.frame("hi", "bye")
names(df) <- c("hello", "goodbye")

#I am trying to add "hola" and "ciao" as a new row
de <- data.frame("hola", "ciao")

merge(df, de) # Adds to the same row as new columns

# Unfortunately, I couldn't find an rbind() solution that wouldn't give me an error

어떤 도움을 주시면 감사하겠습니다



답변

@Khashaa 및 @Richard Scriven이 주석에서 지적한 것처럼 추가하려는 모든 데이터 프레임에 대해 일관된 열 이름을 설정해야합니다.

따라서 두 번째 데이터 프레임의 열 이름을 명시 적으로 선언 de한 다음 rbind(). 첫 번째 데이터 프레임의 열 이름 만 설정합니다 df.

df<-data.frame("hi","bye")
names(df)<-c("hello","goodbye")

de<-data.frame("hola","ciao")
names(de)<-c("hello","goodbye")

newdf <- rbind(df, de)


답변

간단하게 만들어 보겠습니다.

df[nrow(df) + 1,] = c("v1","v2")


답변

또는 @MatheusAraujo에서 영감을 얻었습니다.

df[nrow(df) + 1,] = list("v1","v2")

이것은 혼합 데이터 유형을 허용합니다.


답변

지금 거기 add_row()로부터 tibble또는 tidyverse패키지.

library(tidyverse)
df %>% add_row(hello = "hola", goodbye = "ciao")

지정되지 않은 열은 NA.


답변

내가 좋아하는 list대신 c더 나은 혼합 데이터 유형을 처리하기 때문에. 원본 포스터의 질문에 추가 열 추가 :

#Create an empty data frame
df <- data.frame(hello=character(), goodbye=character(), volume=double())
de <- list(hello="hi", goodbye="bye", volume=3.0)
df = rbind(df,de, stringsAsFactors=FALSE)
de <- list(hello="hola", goodbye="ciao", volume=13.1)
df = rbind(df,de, stringsAsFactors=FALSE)

문자열 / 인수 변환이 중요한 경우 몇 가지 추가 제어가 필요합니다.

또는 MatheusAraujo / Ytsen de Boer의 솔루션과 함께 원래 변수를 사용합니다.

df[nrow(df) + 1,] = list(hello="hallo",goodbye="auf wiedersehen", volume=20.2)

이 솔루션은 데이터 프레임에 기존 데이터가 없으면 문자열과 잘 작동하지 않습니다.


답변

별로 우아하지는 않지만 :

data.frame(rbind(as.matrix(df), as.matrix(de)))

rbind함수 문서에서 :

들면 rbind열 이름 적절한 이름 첫번째 인수 찍은 같습니다 행렬 COLNAMES …


답변

stringsAsFactors=FALSE데이터 프레임을 만들 때 추가해야합니다 .

> df <- data.frame("hello"= character(0), "goodbye"=character(0))
> df
[1] hello   goodbye
<0 rows> (or 0-length row.names)
> df[nrow(df) + 1,] = list("hi","bye")
Warning messages:
1: In `[<-.factor`(`*tmp*`, iseq, value = "hi") :
  invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, iseq, value = "bye") :
  invalid factor level, NA generated
> df
  hello goodbye
1  <NA>    <NA>
> 

.

> df <- data.frame("hello"= character(0), "goodbye"=character(0), stringsAsFactors=FALSE)
> df
[1] hello   goodbye
<0 rows> (or 0-length row.names)
> df[nrow(df) + 1,] = list("hi","bye")
> df[nrow(df) + 1,] = list("hola","ciao")
> df[nrow(df) + 1,] = list(hello="hallo",goodbye="auf wiedersehen")
> df
  hello         goodbye
1    hi             bye
2  hola            ciao
3 hallo auf wiedersehen
>