簡體   English   中英

如何在R中有條件地分配相同的數據但更改列值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM