데이터 프레임에 행 추가
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
#I couldnt find an rbind solution that wouldnt give me an error
어떤 아이디어?
@Khashaa 및 @Richard Scriven이 주석에서 지적한 것처럼 추가하려는 모든 데이터 프레임에 대해 일관된 열 이름을 설정해야합니다.
두-th 데이터 따라서-frame의 열 이름을 명시 적으로 선언 한 다음를 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")
이것은 혼합 데이터 유형을 허용합니다.
내가 좋아하는 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
열 이름 적당한 가격이 인수되었습니다.
지금 거기 add_row()
에서 tibble
또는 tidyverse
패키지.
library(tidyverse)
df %>% add_row(hello = "hola", goodbye = "ciao")
지정되지 않은 열은 NA
.
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
>
stringsAsFactors=FALSE
데이터 프레임을 만들 때 지정해야 합니다.
> rm(list=ls())
> trigonometry <- data.frame(character(0), numeric(0), stringsAsFactors=FALSE)
> colnames(trigonometry) <- c("theta", "sin.theta")
> trigonometry
[1] theta sin.theta
<0 rows> (or 0-length row.names)
> trigonometry[nrow(trigonometry) + 1, ] <- c("0", sin(0))
> trigonometry[nrow(trigonometry) + 1, ] <- c("pi/2", sin(pi/2))
> trigonometry
theta sin.theta
1 0 0
2 pi/2 1
> typeof(trigonometry)
[1] "list"
> class(trigonometry)
[1] "data.frame"
stringsAsFactors=FALSE
데이터 프레임을 만들 때 사용하지 않고 새 행을 추가하려고 할 때 다음 오류가 발생합니다.
> trigonometry[nrow(trigonometry) + 1, ] <- c("0", sin(0))
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "0") :
invalid factor level, NA generated
두 데이터 프레임이 동일한 열과 유형을 공유한다는 것을 알고있는 경우 한 데이터 프레임의 레코드를 다른 데이터 프레임에 추가하는 더 간단한 방법이 있습니다. 에서 하나 개의 행을 추가하려면 xx
에 yy
바로 다음을 수행 i
는 IS i
에서 '번째 행을 xx
.
yy[nrow(yy)+1,] <- xx[i,]
그렇게 간단합니다. 지저분한 바인딩이 없습니다. 당신이 모두 추가해야하는 경우 xx
에를 yy
, 다음 중 하나 루프를 전화 또는 R의 순서 능력을 활용하고이 작업을 수행 :
zz[(nrow(zz)+1):(nrow(zz)+nrow(yy)),] <- yy[1:nrow(yy),]
참고 URL : https://stackoverflow.com/questions/28467068/add-row-to-dataframe
'IT' 카테고리의 다른 글
HTML 태그를 HTML로 이스케이프하는 가장 빠른 방법은 무엇입니까? (0) | 2020.08.29 |
---|---|
보기에 매개 변수를 전달하는 방법 (0) | 2020.08.29 |
Vuex 작업에서 약속 반환 (0) | 2020.08.29 |
함수가 이미있는 경우 어떻게 제거합니까? (0) | 2020.08.29 |
다중 선택을 허용하지 않고 HTML로 목록 상자를 만드는 방법은 무엇입니까? (0) | 2020.08.29 |