r数据帧中偶数行的反转符号
我有一个包含10项的数据框,我想对偶数行求反。我想到了这个怪物:r数据帧中偶数行的反转符号,r,dataframe,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 ] change\u甚至你可以简单地做 change_even[c
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 ]
change\u甚至你可以简单地做
change_even[c(FALSE,TRUE),] <- change_even[c(FALSE,TRUE),]*(-1)
change_甚至[c(FALSE,TRUE),]对于data.table,您可以使用data.frame获得类似的结果。类似于这里
库(data.table)
change_偶数使用余数运算符查找偶数行,然后简单地求反
change_even <- data.frame(val=runif(10))
change_even[seq(nrow(change_even)) %% 2 != 1,] = -change_even[seq(nrow(change_even)) %% 2 != 1,]
change\u甚至这就是我想到的:
change_even$val = change_even$val * c(rep(-1,nrow(change_even))^((row(change_even)+1)))
您只需使用回收:
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)^(0:(nrow(change_even)-1))*change_even$val
只是change\u甚至$val*c(1,-1)
@nicola实际上得到了最好的答案,使愚蠢的R向量回收规则看起来像一个功能哈哈:)@灾难性失败愚蠢?这是R IMO最伟大的事情之一。如果@nicola的回答是一个答案,我会接受它。@nicola Recycling在很多情况下都很方便(比如这次),但我永远不会依赖它。这实际上使调试更加困难,因为不同长度的向量相乘是有效的,所以您必须以某种方式捕获它。至少它不应该是默认行为。
(-1)^(0:(nrow(change_even)-1))*change_even$val