簡體   English   中英

R 根據另一列中的值為列賦值

[英]R Assign value to column according to value in another column

我有一個這樣的數據框

 NAME       DIST    
 A          0           
 A          1           
 A          100         
 A          2           
 A          1           
 A          4           
 A          500         
 A          1           
 A          1           

我想要做的是找到一種創建新列 NEWNAME 的有效方法,這樣,如果 DIST > 100,它包含的名稱對於所有先前的行都相同

 NAME       DIST     NEWNAME
 A          0           A
 A          1           A
 A          100         A
 A          2           A2
 A          1           A2
 A          4           A2
 A          500         A3
 A          1           A3
 A          1           A3

我已經使用 for 循環完成了它,但我正在尋找 R 風格的更有效的解決方案。 在我的代碼下方使用 for 循環

k <- 0
for(l in 1:length(df$NAME)){
       if(df$DIST[l] >= 100){
                k <- k+1;
                df$NEWNAME[(l):length(df$NAME)] <- paste(df$NAME,k,sep="")
        }
    }

提前致謝

您可以這樣做來創建新列:

df$NEWNAME=paste0("A", cumsum(0+df$DIST>=100))

我將您的數據用作df並假設您的意思是優於或等於100:

df=data.frame("NAME"=rep("A", 9), "DIST"=c(0,1,100,2,1,4,500,1,1))

編輯

如果您需要在距離>100 的第 N+1 行開始新名稱,您可以在之后執行此操作:

df$NEWNAME2 = lag(df$NEWNAME, n=1, default="A0")
####   NAME DIST NEWNAME NEWNAME2
#### 1    A    0      A0       A0
#### 2    A    1      A0       A0
#### 3    A  100      A1       A0
#### 4    A    2      A1       A1
#### 5    A    1      A1       A1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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