【发布时间】:2015-05-21 07:15:03
【问题描述】:
我有一个字符串(“00010000”),需要确定我们在哪个位置看到第一个“1”。 (这告诉我客户在哪个月份活跃)
我有一个如下所示的数据集:
id <- c(1:5)
seq <- c("00010000","00001000","01000000","10000000","00010000")
df <- data.frame(id,seq)
我想为每个 id 创建一个标识 first_month_active 的新字段。
我可以使用嵌套的 ifelse 函数手动执行此操作:
df$first_month_active <-
ifelse(substr(df$seq,1,1)=="1",1,
ifelse(substr(df$seq,2,2)=="1",2,
ifelse(substr(df$seq,3,3)=="1",3,
ifelse(substr(df$seq,4,4)=="1",4,
ifelse(substr(df$seq,5,5)=="1",5,99 )))))
这给了我想要的结果:
id seq first_position
1 00010000 4
2 00001000 5
3 01000000 2
4 10000000 1
5 00010000 4
但是,对于包含 36 个月的数据,这不是一个理想的解决方案。
我想使用带有 ifelse 语句的循环,但是我真的在语法上苦苦挣扎
for (i in 1:36) {
ifelse(substr(df$seq,0+i,0+i)=="1",0+i,
}
任何想法将不胜感激
【问题讨论】:
-
我认为
strsplit可能会有所帮助。
标签: r loops if-statement substring