2013-04-29 8 views
2

I는 다음의 구조를 갖는 R 데이터 프레임을R 데이터 프레임에서 하나의 데이터 포인트를 선택

Iterations Subset EqIT lSBR rSBR contrast_rl contrast_rb contrast_lb noise_r noise_l noise_bg 
1   2  10 20 14.26 10.82  0.24  0.82  0.85 0.78 0.66  1.16 
2   3  10 30 14.15 10.84  0.25  0.83  0.86 0.82 0.67  1.28 
3   4  10 40 13.93 10.73  0.25  0.83  0.86 0.83 0.68  1.33 
4   5  10 50 13.85 10.65  0.25  0.83  0.86 0.83 0.69  1.39 
5   6  10 60 13.84 10.68  0.25  0.83  0.86 0.83 0.69  1.39 
6   7  10 70 13.68 10.54  0.25  0.83  0.86 0.83 0.70  1.39 

I 다른 모든 lSBR를 가변 l_norm 및 r_norm에 lSBR 및 rSBR의 값을 할당하고 정규화하려는 및 rSBR 값을이 값으로 나타냅니다. 이 작업을 수행하는 가장 좋은 방법은 확실하지 않습니다. 순간 내 성가신 접근 방식은

subs <- subset(df,Subset==20 & EqIT==200) 
l_norm <- subs[1,4] 
r_norm <- subs[1,5] 
df <- transform(df, lSBR = lSBR/l_norm, rSBR = rSBR/r_norm) 

누군가가 아직도 기초 고민하고 같이 R이 간단한 작업에 접근하는 더 나은 방법에 나에게 몇 가지 지침을 줄 수있다.

데이터 프레임 구조는 아래와 같습니다 :

structure(list(Iterations = c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
    10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 1L, 2L, 
    3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L), Subset = c(10L, 10L, 10L, 10L, 10L, 
    10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 
    10L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L), EqIT = c(20L, 30L, 40L, 
    50L, 60L, 70L, 80L, 90L, 100L, 110L, 120L, 130L, 140L, 150L, 
    160L, 170L, 180L, 190L, 200L, 20L, 40L, 60L, 80L, 100L, 120L, 
    140L, 160L, 180L, 200L, 10L, 15L, 20L, 25L, 30L, 35L, 40L, 45L, 
    50L, 55L, 60L, 65L), lSBR = c(14.26, 14.15, 13.93, 13.85, 13.84, 
    13.68, 13.78, 13.76, 13.71, 13.71, 13.59, 13.58, 13.7, 13.6, 
    13.57, 13.53, 13.57, 13.58, 13.56, 14.17, 13.66, 13.4, 13.35, 
    13.3, 13.3, 13.29, 13.26, 13.29, 13.35, 14.62, 14.64, 14.58, 
    14.51, 14.41, 14.35, 14.3, 14.25, 14.19, 14.11, 14.06, 14.07), 
     rSBR = c(10.82, 10.84, 10.73, 10.65, 10.68, 10.54, 10.65, 
     10.61, 10.56, 10.56, 10.44, 10.43, 10.54, 10.41, 10.4, 10.4, 
     10.4, 10.41, 10.39, 11.03, 10.73, 10.54, 10.49, 10.43, 10.45, 
     10.43, 10.42, 10.42, 10.49, 10.78, 10.9, 10.87, 10.89, 10.89, 
     10.87, 10.83, 10.8, 10.78, 10.74, 10.69, 10.65), contrast_rl = c(0.24, 
     0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.24, 0.24, 0.24, 0.24, 
     0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 
     0.24, 0.25, 0.25, 0.24, 0.23, 0.23, 0.23, 0.23, 0.28, 0.27, 
     0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26 
     ), contrast_rb = c(0.82, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 
     0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.82, 0.82, 0.82, 0.82, 
     0.82, 0.82, 0.81, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 
     0.82, 0.82, 0.81, 0.82, 0.82, 0.83, 0.83, 0.83, 0.83, 0.83, 
     0.83, 0.83, 0.83, 0.83), contrast_lb = c(0.85, 0.86, 0.86, 
     0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 
     0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.86, 0.86, 0.86, 
     0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.85, 0.86, 0.85, 0.86, 
     0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86), noise_r = c(0.78, 
     0.82, 0.83, 0.83, 0.83, 0.83, 0.83, 0.84, 0.84, 0.84, 0.84, 
     0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.78, 0.81, 
     0.82, 0.84, 0.84, 0.84, 0.83, 0.83, 0.83, 0.84, 0.73, 0.77, 
     0.79, 0.8, 0.81, 0.82, 0.82, 0.83, 0.83, 0.83, 0.84, 0.84 
     ), noise_l = c(0.66, 0.67, 0.68, 0.69, 0.69, 0.7, 0.7, 0.7, 
     0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 
     0.71, 0.67, 0.69, 0.7, 0.7, 0.71, 0.71, 0.71, 0.71, 0.71, 
     0.72, 0.6, 0.63, 0.65, 0.66, 0.67, 0.68, 0.68, 0.69, 0.69, 
     0.69, 0.69, 0.69), noise_bg = c(1.16, 1.28, 1.33, 1.39, 1.39, 
     1.39, 1.44, 1.44, 1.44, 1.44, 1.44, 1.44, 1.44, 1.37, 1.37, 
     1.37, 1.37, 1.37, 1.37, 1.16, 1.33, 1.39, 1.44, 1.44, 1.44, 
     1.44, 1.5, 1.5, 1.5, 0.9, 1.05, 1.11, 1.22, 1.28, 1.33, 1.33, 
     1.33, 1.39, 1.39, 1.39, 1.39)), .Names = c("Iterations", 
    "Subset", "EqIT", "lSBR", "rSBR", "contrast_rl", "contrast_rb", 
    "contrast_lb", "noise_r", "noise_l", "noise_bg"), row.names = c(NA, 
    -41L), class = "data.frame") 

답변

2

당신의 접근 방식 :

subs <- subset(df,Subset==20 & EqIT==200) 
l_norm <- subs[1,4] 
r_norm <- subs[1,5] 
df2 <- transform(df, lSBR = lSBR/l_norm, rSBR = rSBR/r_norm) 

그것은 내게 너무 나쁜 것 같지 않지만, 대신에 두 줄의 을 그것을 할 수 있습니다 네 다음과 같이

subline <- with(df,which(Subset==20 & EqIT==200)) 
## OR subline <- which(df$Subset==20 & df$EqIT==200) 
df3 <- transform(df, lSBR = lSBR/lSBR[subline], rSBR=rSBR/rSBR[subline]) 

all.equal(df2,df3) ## TRUE 
+0

우수한. 당신의 도움을 주셔서 감사합니다 – moadeep

관련 문제