在r数据帧中反转偶数行的符号

时间:2017-01-04 15:55:36

标签: r dataframe

我有一个包含10个项目的数据框,我想要否定偶数行。我想出了这个怪物:

change_even <- data.frame(val=runif(10))
change_even$val[row(  as.matrix(change_even[,'val']) ) %% 2 == 0 ] <- -change_even$val[row(  as.matrix(change_even[,'val']) ) %% 2 == 0 ]

有更好的方法吗?

6 个答案:

答案 0 :(得分:8)

只需使用回收:

change_even$val*c(1,-1)
#[1]  0.1077468 -0.5418167  0.8319609 -0.7230043  0.6649786 -0.7232669
#[7]  0.2677659 -0.4035824  0.6880934 -0.5600653

(由于没有设置种子,因此值不可重复;但是可以清楚地看到交替的符号。)

答案 1 :(得分:3)

你可以这样做,

change_even[c(FALSE,TRUE),] <- change_even[c(FALSE,TRUE),]*(-1)

答案 2 :(得分:2)

使用data.table,您可以获得与data.frame类似的内容。与此类似Selecting multiple odd or even columns/rows for dataframe in R

library(data.table)   
change_even <- data.table(val=runif(10))
even_indexes<-seq(2,nrow(change_even),2)
change_even <- change_even[even_indexes,val:=val*-1]

答案 3 :(得分:2)

使用余数运算符查找偶数行,然后简单地否定

change_even <- data.frame(val=runif(10))
change_even[seq(nrow(change_even)) %% 2 != 1,] = -change_even[seq(nrow(change_even)) %% 2 != 1,]

答案 4 :(得分:1)

这就是我提出的:

change_even$val = change_even$val * c(rep(-1,nrow(change_even))^((row(change_even)+1)))

答案 5 :(得分:1)

另一个:

(-1)^(0:(nrow(change_even)-1))*change_even$val