数据帧移位列

时间:2012-11-20 01:37:58

标签: r dataframe

我在R中使用了一个数据框,其中col4应该小于col5,但有时这种情况不会发生。

无论如何我可以将值从col4转移到col5,反之则不必使用forloop,因为它们在R中的时间非常昂贵。

即,如果给定行col4 = 100,col5 = 10,我想移动它们,col4应该变为10,col5应该变为100.

建议欢迎,提前谢谢!

3 个答案:

答案 0 :(得分:4)

假设您的数据框名为d:

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

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

答案 1 :(得分: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

答案 2 :(得分: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)

应该做你想做的事 - 而不是循环。