R:用大于阈值的另一列中的所有值的字母序列组成一列

  • 本文关键字:一列 大于 阈值 r dataframe
  • 更新时间 :
  • 英文 :


我有一个多列数据框架,其中一列列称为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的新列,NAnumber < 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]

如果你愿意,你可以强制恢复到原来的行顺序。

最新更新