R 是否有一个函数用于在列中创建基于索引的值?
我想要的结果是在这个数据帧中添加一个新列,其值的数量在max BSTN(n)中 因此,对于第一行,新列的结果将是 1,因为只有BSTN 1具有值 对于第五行,结果将是4,因为BSTN 4具有现有值。使用相同的逻辑,新列的结果如下所示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
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))