2013-08-19 3 views
1

많은 관련 게시물을 읽었지만 매우 간단한 문제인 것처럼 보이는 해결책을 찾지 못하는 것 같습니다. 저는 R을 사용하고 있습니다. 다음 방정식 x = R + 2B를 데이터 프레임에 적용하고 싶습니다. 저는 행 R이 값 1 : 6의 벡터이고, 행 B가 같은 것입니다. R [i] + 2B [1 : 6]의 값인 새로운 벡터를 만들고 싶습니다. 따라서 각 R 값에는 6 개의 결과 값이 있습니다. 전체적으로 벡터에 36 개의 값이 있습니다.행의 각 값에 대한 함수를 다른 행의 모든 ​​값에 적용하여 결과 추가

> data 
    R B 
1 1 1 
2 2 2 
3 3 3 
4 4 4 
5 5 5 
6 6 6 

> x <- matrix(ncol=6,nrow=6) 
> for (i in nrow(data)){ 
+ x[i] = data$R[i]+(2*data[1:6,2]) 
+ } 
Warning message: 
In x[i] = data$R[i] + (2 * data[1:6, 2]) : 
number of items to replace is not a multiple of replacement length 

내가 뭘하고있는 건데, 맞지 않아. 이 작업을 간단하고 효율적으로 수행하는 방법에 대한 의견이 있으십니까?

미리 감사드립니다.

+0

2B [1 : 6]의 의미는 무엇입니까? B는 무엇입니까? – Fernando

+0

B는 1 : 6 값을 포함하는 내 열 이름입니다. R은 1 : 6 값을 가진 열 이름이기도합니다. 데이터에는 R과 B의 두 열이 포함됩니다. 이해가 되나요? –

답변

0

당신은 sapply 사용할 수 있습니다

sapply(data$R, function(x)x + 2*data[1:6,"B"]) 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 3 4 5 6 7 8 
[2,] 5 6 7 8 9 10 
[3,] 7 8 9 10 11 12 
[4,] 9 10 11 12 13 14 
[5,] 11 12 13 14 15 16 
[6,] 13 14 15 16 17 18 

을 대신 행렬의 벡터, 당신은 당신이 expand.grid 찾고있는 as.vector

+0

Brilliant. 정말 고맙습니다. 이것은 효과적이었고 확장을 통해 노는 것을 시작할 것입니다. 대단히 감사합니다! –

0

을 사용할 수 원하는 경우 :

data <- data.frame(R=1:6,B=1:6) 
out <- expand.grid(data$R,2*data$B) 
apply(out,1,sum) 
[1] 3 4 5 6 7 8 5 6 7 8 9 10 7 8 9 10 11 12 9 10 11 12 13 14 11 
[26] 12 13 14 15 16 13 14 15 16 17 18 
0
sapply(data[, 'R'], function(x)x + 2*data[, 'B']) 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 3 4 5 6 7 8 
[2,] 5 6 7 8 9 10 
[3,] 7 8 9 10 11 12 
[4,] 9 10 11 12 13 14 
[5,] 11 12 13 14 15 16 
[6,] 13 14 15 16 17 18 

각 열은 'R'행에 해당합니다.