我有一個數據幀有10個項目,我想否定偶數行。我想出了這個怪物:r數據幀中偶數行的反轉符號
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 ]
有沒有更好的方法?
我有一個數據幀有10個項目,我想否定偶數行。我想出了這個怪物:r數據幀中偶數行的反轉符號
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_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
(由於未設置種子,因此值不可重複;然而交替的標誌可以清楚地看到)。
你可以簡單地做,
change_even[c(FALSE,TRUE),] <- change_even[c(FALSE,TRUE),]*(-1)
隨着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]
使用剩餘運算符查找偶數行,然後簡單地否定
change_even <- data.frame(val=runif(10))
change_even[seq(nrow(change_even)) %% 2 != 1,] = -change_even[seq(nrow(change_even)) %% 2 != 1,]
這是我想出了:
change_even$val = change_even$val * c(rep(-1,nrow(change_even))^((row(change_even)+1)))
還有一句:
(-1)^(0:(nrow(change_even)-1))*change_even$val
只是'change_even $ VAL * C(1,-1)'。 – nicola
@nicola實際上得到了最好的答案,使得愚蠢的R向量回收規則看起來像一個特徵哈哈:) –
@災難性失敗愚蠢?這是R IMO最偉大的事情之一。 – nicola