[英]How to assign the same data but changing column value conditionally in R
我試圖根據某些條件替換列中的值,並將該數據框分配給另一個名稱。 但是每次我調用分配的名稱時,我只會得到更改的值,而不是整個數據。 我在這里想念什么? 我是一個初學者,所以請放松一下:-)
test = data.frame(a=1:5,b=6:10,c=7:11)
replaced = test$b[test$b>7& test$b<=9]=0
replaced
#[1] 0
當我打電話給替換者時,為什么我沒有得到整個數據集?
謝謝!
只需先復制一份,然后替換:
test=data.frame(a=1:5,b=6:10,c=7:11)
replaced <- test
replaced$b[replaced$b > 7 & replaced$b <= 9] <- 0
replaced
# a b c
#1 1 6 7
#2 2 7 8
#3 3 0 9
#4 4 0 10
#5 5 10 11
您最初的問題是由於分配從右到左運行:
x <- y <- 0
x
#[1] 0
y
#[1] 0
進行單個分配比循環遍歷每一行要快得多:
test2 <- test[rep(1:5,3e4),]
nrow(test2)
#[1] 150000
system.time({
replaced <- test2
replaced$b[replaced$b>7& replaced$b<=9] <- 0
})
# user system elapsed
# 0 0 0
system.time({
i=1
for ( i in 1:nrow(test2))
{
if(test2[i,]$b>7& test2[i,]$b<=9){
test2[i,]$b=0
}
}
})
# user system elapsed
# 210.69 0.01 211.69
您可以嘗試這樣的事情-
test=data.frame(a=1:5,b=6:10,c=7:11)
i=1
for ( i in 1:nrow(test))
{
if(test[i,]$b>7& test[i,]$b<=9){
test[i,]$b=0
}
}
這會將b的值更改為8-9到0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.