gpt4 book ai didi

r - 根据 R 中的下一个值计算一个数字条件

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

一个数据框包含 ID、等级和几个二进制变量 (0,1)

ID <- c(1,2,3,4,5,6,7,8,9,10)
grade <- c("a", "b", "e", "a", "d", "d", "a", "c", "c", "b")
b1 <- c(1,0,0,0,0,0,0,0,0,0)
b2 <- c(1,1,0,0,0,1,0,1,0,0)
b3 <- c(1,0,0,1,1,0,0,1,0,0)
b4 <- c(1,1,0,0,0,1,0,1,0,0)
b5 <- c(1,1,1,1,1,1,0,1,1,0)
b6 <- c(1,1,1,1,1,1,1,1,1,0)
df <- data.frame(ID, grade, b1, b2, b3, b4, b5, b6)

我需要创建一个新的整数列(称为 y),其值从 1 到 6

他们计算 y 的方法是返回 (b1 到 b6) 中第一个 1 的位置,之后行中的值都是 1。

例如:
for ID=1, y=1
ID=2, y=4
ID=3, y=5

但是,如果 b1 到 b6 中的所有值都为零,则返回“no”。

此外,代码越快越好。

最佳答案

我们先连接列,然后我们可以使用正则表达式来确定连续匹配的位置。我们可以使用 negative lookaround 来做到这一点。正则表达式。

感谢 Rich Scriven 对于 paste0 技巧。

使用 纵梁 :

flag1 <- do.call("paste0",df[,3:8])
df$flag1 <- flag1

library(stringr)
df$flag2 <- str_locate(flag1,"(?!=0)1{1,}$")[,"start"]
df <- data.frame(df)
df[is.na(df$flag2),"flag2"] <- 0

答案在 flag2 列 :
ID grade b1 b2 b3 b4 b5 b6  flag1 flag2
1 1 a 1 1 1 1 1 1 111111 1
2 2 b 0 1 0 1 1 1 010111 4
3 3 e 0 0 0 0 1 1 000011 5
4 4 a 0 0 1 0 1 1 001011 5
5 5 d 0 0 1 0 1 1 001011 5
6 6 d 0 1 0 1 1 1 010111 4
7 7 a 0 0 0 0 0 1 000001 6
8 8 c 0 1 1 1 1 1 011111 2
9 9 c 0 0 0 0 1 1 000011 5
10 10 b 0 0 0 0 0 0 000000 0

关于r - 根据 R 中的下一个值计算一个数字条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298796/

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