2012-11-20 4 views
1

R에서 데이터 프레임을 사용하고 있는데, col4는 col5보다 작다고 가정되지만 때로는 발생하지 않습니다.데이터 프레임 시프트 열

들이 R.

의 비용이 꽤 시간이 있기 때문에 어쨌든 내가, 그리고 viceversa에 forloop을 사용하지 않고 COL5에 col4에서 값이 이동할 수가

즉, col4 주어진 행 = 100의 경우, col5 = 10이면 col4가 10이되고 col5가 100이되어야합니다.

미리 감사드립니다.

답변

4

데이터 프레임이 D라는 것을 가정 :

newCol4 <- pmin(d$col4, d$col5) 
newCol5 <- pmax(d$col4, d$col5) 

d$col4 <- newCol4 
d$col5 <- newCol5 
2

스와핑을 수행하기 위해 논리적 인덱싱과 임시 변수를 사용할 수 있습니까?

# find the rows where col4 >= col5 (or maybe >? depends on what you want) 
idx <- data$col4 >= data$col5 
# idx is TRUE for columns we want to swap. 

# now do the swap: 
# a) save data$col5 
tmp <- data$col5[idx] 
# b) replace data$col5 with the col4 values (where relevant) 
data$col5[idx] <- data$col4[idx] 
# c) replace data$col4 with our saved col5 values 
data$col4[idx] <- tmp 
+0

주어진 예제에서>는> =에 동일한 결과를 제공합니다. 물론 더 높은 목적이있을 수 있습니다. –

+0

예, 그렇기 때문에 언급합니다. –

1
indices <- which(data.frame.instance[,4]<data.frame.instance[,5]) 
data.frame.copy <- data.frame.instance 
data.frame.copy[indices,5] <- data.frame.instance[indices,4] 
data.frame.instance[indices,5] <- data.frame.copy[indices,4] 
rm(data.frame.copy, indices) 

은 당신이 원하는 일을해야 - 루프도하고.

+0

'which'에 대한 호출이 필요하지 않으며 제거 될 수 있습니다. –

관련 문제