2013-08-28 4 views
0

저는 R의 (아주) 새로운 사용자이고 여기 MATLAB 코드를 복제하려고합니다 (이 단계에서는 R을 Octave로 지정하는 것이 좋습니다). I 번째의 값에, 첫 번째 열을 기준 변수를 할당 할 수 있도록하려는R : 행렬의 열을 기반으로 변수 이름을 지정하십시오.

variable value 
th 100 
tw 100 
gap 30 

:

제가 df 다음 행렬을 갖는다. 기본적으로 th = 100, tw = 100, gap = 30입니다.

내 최종 목표는 다음과 같은 방식으로 데이터를 조작 할 수 있습니다 :

difference <- th-gap 

편집 :

>dput(df) 
structure(list(s = structure(1:3, .Label = c("aa", "bb", "cc"), class = "factor"), 
n = c(2, 3, 5)), .Names = c("s", "n"), row.names = c(NA, -3L), class = "data.frame") 

답변

0

사용 M이 행렬이다

Vectorize(assign, c("x", "value"))(as.character(M[,1]), M[,2], envir=globalenv()) 

또는 데이터 프레임. as.character은 할당 전에 요소가 문자열로 변환되는지 확인합니다.

M이 두 번째 열에 숫자가 들어있는 문자 행렬 인 경우 M[,2] 대신 as.numeric(M[,2])을 사용할 수 있습니다.

하지만 솔직히 말하면이 방법이 최선의 방법은 아닙니다. assign을 사용하면 직관적이지 못하여 읽기 어려운 코드로 이어지기 때문에 대개 의아하게 싫증납니다.

당신은 목록을 만들 수 있습니다

L <- as.list(M[,2]) 
names(L) <- M[,1] 

다음은 L[["th"]]에서 같은 이름으로 데이터를 액세스 할 수 있습니다.

+0

감사합니다. R을 실행하는 컴퓨터에있을 때 필요한 정보를 게시합니다. 그러나 할당을 사용하는 이유에 대해 설명 할 수 있습니까? 나는 또한 루프를 사용하지만 솔루션에 대한 나의 탐색에서 루프가 R에서도 코딩이 좋지 않다는 것을 읽었다. 나는 왜 그리고 그 뒤에 무엇이 생각인지 이해하고 싶습니다. – irshaadv

+0

dput (df) 구조체 (list (s = 구조체 1 : 3, 레이블 = c ("aa", "bb", "cc" ), 클래스 = "factor" 3, 5)), .Names = c ("s", "n"), row.names = c (NA, -3L), 클래스 = "data.frame") – irshaadv

+0

@irshaadv, 나는 자유를 원래 게시물에 추가하십시오. 제가 말한 것처럼, 직관적이지 않고 대부분의 경우 읽기 쉬운 코드로 이어지기 때문에 "frowned"합니다. 달성하려는 내용을 게시하면 R에서 코드를 효율적/우아하게 작성하는 데 도움을 줄 수 있습니다.이 질문은 매우 복잡한 비트 작업처럼 보입니다. 새로운 질문 게시를 고려하십시오. –

0

data.frame 거의 확실하게 다른 개체 인 matrix입니다. matrix은 차원 속성이있는 원자 벡터로 matrix으로 마무리됩니다. 실제로 원자 벡터이므로 행렬에는 단일 유형의 데이터 만 포함될 수 있으므로 데이터에 numeric 데이터를 섞을 수 없습니다. 반면에 data.frame은 목록 유형입니다. 각 목록 요소는 동일한 길이의 원자 벡터입니다 (길이는 행 수, 목록의 요소 수는 열 수). 각 list 요소는 다른 유형의 데이터를 보유 할 수 있습니다.

그래서

# Construct the data 
df <- read.table(text = "variable value 
th 100 
tw 100 
gap 30" , h = TRUE) 

df 
# variable value 
#1  th 100 
#2  tw 100 
#3  gap 30 

# Subset the data.frame to the values you want using the `[` operator 
difference <- df[ df$variable == 'th' , 'value' ] - df[ df$variable == 'gap' , 'value' ] 
#[1] 70 

우리는 [ 연산자를 사용하여 data.frame 서브 세트를 할 수 있습니다 ... 당신이 data.frame가 있다고 가정 할 수 있습니다. [,] 내의 첫 번째 인수는 행을 참조하고 두 번째 인수는 열을 나타냅니다. 따라서 [ df$variable == 'th' , 'value' ]은 rows 인수에 인 논리 벡터를 반환하고 일 때 value 열에 대해이 조건을 충족하는 모든 행을 반환합니다.

+0

데이터 프레임이 가장 확실합니다. Excel에서 준비된 .csv에서 데이터를 읽습니다. 변수는 변하기 때문에 변수 이름을 명시 적으로 언급하지 않는 코드를 사용하는 것이 좋습니다. 또한 가능한 경우 "방정식"(예 : th- 갭)의 긴 설명을 피하는 것이 좋습니다. – irshaadv

관련 문제