2012-11-20 18 views
1

我在R中使用了一个数据帧,其中col4应该小于col5,但有时候并不会发生。数据帧移位列

反正是有,我可以将值从COL4转向COL5,反之亦然,而无需使用一个for循环,因为他们是有相当时间R.

昂贵

也就是说,如果对于一个给定的行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) 

应该做你想要什么 - 没有for循环。

+0

对'哪个'的调用不是必需的,可以删除。 –