R 是否有一个函数用于在列中创建基于索引的值?

R 是否有一个函数用于在列中创建基于索引的值?,r,R,我想要的结果是在这个数据帧中添加一个新列,其值的数量在max BSTN(n)中 因此,对于第一行,新列的结果将是 1,因为只有BSTN 1具有值 对于第五行,结果将是4,因为BSTN 4具有现有值。使用相同的逻辑,新列的结果如下所示 CARDID BSTN BSTN2 BSTN3 BSTN4 BSTN5 5786 150 0 0 0 0 9737 150 0 0 0 0 45924 150 151 154

我想要的结果是在这个数据帧中添加一个新列,其值的数量在max BSTN(n)中

因此,对于第一行,新列的结果将是 1,因为只有BSTN 1具有值

对于第五行,结果将是4,因为BSTN 4具有现有值。使用相同的逻辑,新列的结果如下所示

 CARDID BSTN BSTN2 BSTN3 BSTN4 BSTN5
 5786  150     0     0     0     0
 9737  150     0     0     0     0
45924  150   151   154     0     0
66405  150     0     0     0     0
91720  150     0     0  4233     0
96172  150     0     0     0  3000  

我们可以使用
max.col
ties.method=“last”
来获取最后一个非零值的列号

 CARDID BSTN BSTN2 BSTN3 BSTN4 BSTN5 NTF
 5786  150     0     0     0     0    1
 9737  150     0     0     0     0    1
45924  150   151   154     0     0    3
66405  150     0     0     0     0    1
91720  150     0     0  4233     0    4
96172  150     0     0     0  3000    5

我们还可以按行使用
apply

cols <- grep('^BSTN', names(df))
df$NTF <- max.col(df[cols] != 0, ties.method = "last")
数据

apply(df[-1], 1, function(x) max(which(x != 0)))
#[1] 1 1 3 1 4 5

df谢谢!!但实际上,在我的实际数据集中,除了BSTN之外,我还有更多的列。如何编辑此函数以仅计算带有BSTNs的max.cols。@YunHyunsoo是的,我已将其包含在答案中。使用
grep
cols查找列,我稍微了解grep和正则表达式。我遇到的问题是,我有一个名为“BSTN.r”的列名,我不想被考虑。在这种情况下,我有办法写grep吗?我尝试添加了一个“.”来写入“^BSTN.”,但在这种情况下,它似乎消除了BSTN,因为没有标记数字(如BSTN2或BSTN3)。如果您要选择带有“BSTN”后跟数字的列,可以在列名中使用“
cols Do you have”。”无论是否,我都感到困惑。好吧,如果“BSTN.r”是唯一出现错误的列,您可以删除它<代码>cols
apply(df[-1], 1, function(x) max(which(x != 0)))
#[1] 1 1 3 1 4 5
df <- structure(list(CARDID = c(5786L, 9737L, 45924L, 66405L, 91720L, 
96172L), BSTN = c(150L, 150L, 150L, 150L, 150L, 150L), BSTN2 = c(0L, 
0L, 151L, 0L, 0L, 0L), BSTN3 = c(0L, 0L, 154L, 0L, 0L, 0L), BSTN4 = c(0L, 
0L, 0L, 0L, 4233L, 0L), BSTN5 = c(0L, 0L, 0L, 0L, 0L, 3000L)), 
class = "data.frame", row.names = c(NA, -6L))