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…)