gpt4 book ai didi

r - 使用数据框列的级别添加一个新列,每个级别都有唯一的递增编号

转载 作者:行者123 更新时间:2023-12-04 12:25:45 25 4
gpt4 key购买 nike

我正在尝试在包含基于不同列的级别的递增数字的数据框中创建一个新列。也就是说,我想重命名列的级别,以便每个级别都有一个唯一的递增编号。

df <- data.frame(y1 = c(100, 100, 100, 200, 200, 500, 500, 500),
y2 = c(6, 5, 4, 2, 5, 4, 3, 2))
df$y1 <- as.factor(df$y1)
levels(df$y1) ## [1] "100" "200" "500"

预期输出:基于 y1 级别的具有新级别名称的新 y3 列。 “b”不是必需的,我可以稍后添加。
y1    y2    y3
100 6 b1
100 5 b1
100 4 b1
200 2 b2
200 5 b2
500 4 b3
500 3 b3
500 2 b3

我搞砸了 lapply和各种 for循环,但我真的不知道我在这里做什么......像这样的东西:
for (i in levels(df$y1)){
batchnum <- 1
if (i == df$y1){
df$y3 <- paste0("b", batchnum)
batchnum <- batchnum + 1
}
}

这只是为每一行用“b1”标记 y3,我猜是因为 if不是矢量化还是什么?
## Warning messages:
1: In if (i == df$y1) { :
the condition has length > 1 and only the first element will be used

最佳答案

使用 data.table :

library(data.table)

setDT(df)
df[, y3 := .GRP, by = y1]
df[, y3 := paste0("b", y3)] # you can change "b" with whatever you want

y1 y2 y3
1: 100 6 b1
2: 100 5 b1
3: 100 4 b1
4: 200 2 b2
5: 200 5 b2
6: 500 4 b3
7: 500 3 b3
8: 500 2 b3

关于r - 使用数据框列的级别添加一个新列,每个级别都有唯一的递增编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49139598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com