2013-02-21 3 views
0

데이터 프레임에 행을 어떻게 할당합니까?행별로 데이터 프레임에 할당

df <- data.frame(id=1:5) 
df[c('x1','x2')] <- c(1,2) 
df[c('x1','x2')] <- matrix(c(1,2),nrow=1) 
df[c('x1','x2')] <- matrix(c(1,2),nrow=1,byrow=T) 

내가 이렇게 할 이유는 내가 각 행에 대해 다변량 정규 분포에서 지점을 생성하고 있다는 점이다 :이 내가 시도하는 일이다.

감사합니다.

편집 :

id x1 x2 
1 1 1 2 
2 2 1 2 
3 3 1 2 
4 4 1 2 
5 5 1 2 

하지만 내가 얻을 것은 : I 출력이 같이 할

id x1 x2 
1 1 1 2 
2 2 2 1 
3 3 1 2 
4 4 2 1 
5 5 1 2 
+0

이 모든 작업을 수행 한 후에 예상되는 결과를 표시 할 수 있습니까? – Arun

+0

편집 : 다중 코드를 수행 할 수 없습니까? 어쨌든, 나는 w0과 w1 행에 두 개의 열을 추가하고 싶다. w0은 1을 끝까지 내리고 w1은 2를 끝까지 내립니다. 따라서 첫 번째 행의 값은 1, 1, 2가됩니다. – icz

+0

함수에서 얻은 결과는 무엇입니까? 함수에서 얻은 것뿐만 아니라 그것을 나타낼 수 있습니까? – Arun

답변

1

의 내부에 표현 뒤에 쉼표를 넣어. 그것이 x에 있다고 가정 해 봅시다.

df <- data.frame(id=1:5) 
x <- 1:2 # function output. 

df <- cbind(df, t(replicate(nrow(df), x))) 
names(df) <- c("id", "x1", "x2") 

> df 

# id x1 x2 
# 1 1 1 2 
# 2 2 1 2 
# 3 3 1 2 
# 4 4 1 2 
# 5 5 1 2 

는 1 개 * 2 차원 벡터의 무리 함수에서 반환되는 경우, 당신은 처음 5 * 2 다음 cbind의 행렬을 작성해야합니다.

예상하시는 것입니까? R의 dataframes 각 열에서 다른 변수 유형을 가질 수 있기 때문에,

당신은 dataframe 행에 벡터를 할당하지 않도록해야합니다 :

+0

하하, 예,이 사소한 예 때문에 트릭을 할 것입니다. 하지만 2 요소 벡터를 반환하는 함수가 있습니다. 아이디어는 각 행의 두 "슬롯"에 벡터를 할당하려고합니다. 죄송합니다. 분명히해야합니다. – icz

+0

게시물을 편집하여 필요한 결과를 표시하십시오. 네가 원하는 걸 이해하지 못하는 것 같아. 행에 2 개의 요소 벡터를 할당한다는 것은 무엇을 의미합니까? 1 열 5 행의 data.frame이 있습니다.행렬로 바인딩하고 싶습니까 ?? – Arun

+0

현재, 1x2 벡터를 순차적으로 생성하고 추가하려고 시도하지만 값의 Mx2 행렬을 생성하고 cbind() 할 수 있어야합니다. 나는 그 생각을하지 않았다 .. 고마워! – icz

0

거의있다! 당신의 함수는 벡터 c(1,2)을 반환 [ ]

df[c('x1','x2'), ] <- <what you would like to assign> 
+1

두 개의 새로운 행이 추가됩니다. 두 개의 새로운 열이 필요합니다! 하지만 고마워! – icz

0

여기 아룬의 답이 왜 작동하는지, 그리고 대안. 열에 숫자, 문자열 및 요인이 포함되어 있다고 가정 해보십시오. 그 데이터 프레임의 행은 벡터이 아니기 때문에 (벡터는 모두 하나의 유형, 즉 모든 숫자 또는 모든 요인이어야하므로) 목록이됩니다. R이 목록을 기대하는 벡터를 할당하려고하면 나쁜 일이 발생할 수 있습니다.

그러나 데이터 프레임 행에 목록을 할당 할 수 있습니다. 예를 들면 :

> df <- data.frame(id=1:5, x1=1, x2=2) 
> df 
    id x1 x2 
1 1 1 2 
2 2 1 2 
3 3 1 2 
4 4 1 2 
5 5 1 2 
> row2 <- list(x1=3, x2=4) 
> df[2, c('x1','x2')] <- row2 
> df 
    id x1 x2 
1 1 1 2 
2 2 3 4 
3 3 1 2 
4 4 1 2 
5 5 1 2 

또는 당신이 (당신의 예에서와 같이) 모든 일의 숫자, 단지 구축 매트릭스 대신 dataframe을 알고있는 경우. 그런 다음 벡터를 행렬 행에 할당 할 수 있습니다.

> mat <- matrix(c(1:5, rep(1,5), rep(2,5)), 5, 3) 
> colnames(mat) <- c("id","x1","x2") 
> mat 
    id x1 x2 
[1,] 1 1 2 
[2,] 2 1 2 
[3,] 3 1 2 
[4,] 4 1 2 
[5,] 5 1 2 
> row2 <- c(3,4) 
> mat[2, c("x1","x2")] <- row2 
> mat 
    id x1 x2 
[1,] 1 1 2 
[2,] 2 3 4 
[3,] 3 1 2 
[4,] 4 1 2 
[5,] 5 1 2