我有一个像这样的数据框
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="")
}
}
提前致谢
答案 0 :(得分:1)
您可以执行此操作来创建新列:
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