R中的数据帧操作

R中的数据帧操作,r,R,我有一个如下所示的数据框: id = c("A","B","C","A","C","C") val = c(5,4,6,7,10,99) df = data.frame(id, val) df id val A 5 B 4 C 6 A 7 C 10 C 99 现在,我想重新排列id列(A、B、C…),保留它们对应的val,然后添加一个新的newid列,从字母E开始,后面是三位数字,计算第一列中id的数量。代码如下: id2 = c("A","A","B

我有一个如下所示的数据框:

id = c("A","B","C","A","C","C")
val = c(5,4,6,7,10,99)
df = data.frame(id, val)
df


id val   
 A   5
 B   4
 C   6
 A   7
 C  10
 C  99
现在,我想重新排列
id
列(A、B、C…),保留它们对应的
val
,然后添加一个新的
newid
列,从字母E开始,后面是三位数字,计算第一列中
id
的数量。代码如下:

id2 = c("A","A","B","C","C","C")
val2 = c(5,7,4,6,10,99)
newid = c("E001","E002","E001","E001","E002","E003")
df2 = data.frame(id2, val2, newid)
df2
最终的结果是:

id2 val2 newid
  A    5  E001
  A    7  E002
  B    4  E001   
  C    6  E001
  C   10  E002
  C   99  E003

有没有一种有效的方法可以做到这一点?

这里有一种方法,使用
order()
函数来排列数据,使用
sprintf()
sapply()
table()
函数来定义
newid

df2 <- df[order(df$id, df$val), ]
df2$newid <- paste0("E", sprintf("%04d", unlist(sapply(table(df$id), function(x) 1:x))))

df2这里有一种方法,使用
order()
函数排列数据,使用
sprintf()
sapply()
table()
函数定义
newid

df2 <- df[order(df$id, df$val), ]
df2$newid <- paste0("E", sprintf("%04d", unlist(sapply(table(df$id), function(x) 1:x))))
df2
keyby
这里进行排序,因此无需显式执行


keyby
这里进行排序,因此无需显式进行排序

谢谢!还有一个问题:您知道如何将newid列与id列连接起来吗?我想得到像A:E001 A:E002 B:E001 C:E001 C:E002 C:E003这样的id列。再次感谢!使用
paste0(id':E',gsub…)
谢谢!还有一个问题:您知道如何将newid列与id列连接起来吗?我想得到像A:E001 A:E002 B:E001 C:E001 C:E002 C:E003这样的id列。再次感谢!使用
paste0(id':E',gsub…)