我有一个多列数据框架,其中一列列称为number
。我还有一个叫做threshold
的向量,它只保存一个数值。
df <- data.frame(number = c(1,2,3,5,1,2,3,7,3,5,7,3,6,7))
threshold <- 5
数据框看起来像这样:
number
1 1
2 2
3 3
4 5
5 1
6 2
7 3
8 7
9 3
10 5
11 7
12 3
13 6
14 7
我想创建一个名为passed
的新列,NA
在number < threshold
和顺序的行中按number >= threshold
的顺序排列字母。(顺序-从数据框顶部的字母a
开始)。它看起来像这样:
number passed
1 1 <NA>
2 2 <NA>
3 3 <NA>
4 5 a
5 1 <NA>
6 2 <NA>
7 3 <NA>
8 7 b
9 3 <NA>
10 5 c
11 7 d
12 3 <NA>
13 6 e
14 7 f
如果可能的话,我不希望在这里使用循环。
我们可以使用
library(data.table)
setDT(df)[number >= threshold, passed := letters[.I]]
如果你想保持以R为基数,并且你知道你将有少于26(字母表的长度)来填充,你可以考虑这样做…
df <- data.frame(number = c(1,2,3,5,1,2,3,7,3,5,7,3,6,7))
threshold <- 5
df$number <- df[order(df$number), ]
df$passed <- NA
N <- length(df$passed[df$number>=threshold])
df$passed[df$number>=threshold] <- LETTERS[1:N]
如果你愿意,你可以强制恢复到原来的行顺序。