2017-05-12 1 views
1

는 I이다른 열에 주어진 동일한 ID를 공유하는 모든 행에 대해 데이터 프레임의 열 값을 정규화하려면 어떻게해야합니까?

ID value 
1 0.5 
1 0.6 
1 0.7 
2 0.5 
2 0.5 
2 0.5 

닮은 dataframe 있고이 같은 동일 ID의 값을 정규화 열을 추가 할 것이다 : 규범 = 값/최대 (같은 ID를 가진 값)

ID value norm 
1 0.5 0.5/0.7 
1 0.6 0.6/0.7 
1 0.7 1 
2 0.5 1 
2 0.3 0.3/0.5 
2 0.5 1 

먼저 정렬하고 루핑하지 않고 R에서 이것을 수행하는 쉬운 방법이 있습니까? 건배

+1

죄송 사용할 수 있습니다,하지만 난 R 비교적 새로운 오전과 내가 구문에 대한 확신입니다. 나는 예제 데이터 프레임을'data <- data.frame ( ID = c (1,1,1,2,2,2,3), value = c (0.5,0.7,0.6,0.5,0.3, 0.2,0.3))' 새 열을 어떻게 계산합니까? – Panamamann

답변

3

기본 R 도구를 사용하는 솔루션 :

data$norm <- with(data, value/ave(value, ID, FUN = max)) 

기능 ave은 매우 유용합니다, 당신은 ?ave을 읽을 수 있습니다.

2
# Create an example data frame 
dt <- read.csv(text = "ID, value 
1, 0.5 
1, 0.6 
1, 0.7 
2, 0.5 
2, 0.5 
       2, 0.5") 

# Load package 
library(tidyverse) 

# Create a new data frame with a column showing normalization 
dt2 <- dt %>% 
    # Group the ID, make sure the following command works only in each group 
    group_by(ID) %>% 
    # Create the new column norm 
    # norm equals each value divided by the maximum value of each ID group 
    mutate(norm = value/max(value)) 
+0

고마워요,이 작품! – Panamamann

2

우리는 data.table

library(data.table) 
setDT(dt)[, norm := value/max(value), ID] 
관련 문제