[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
>