在R语言中查找字符切换对应的特定x值(n→b最后x、b→m首个x)
找到字符向量切换对应的x值
首先构造你的数据框:
x = seq(0, 1.4, by = 0.1) z = c("n", "n", "b", "b", "b", "n", "n", "b", "b", "b", "b", "m", "m", "m", "m") df = data.frame(x, z)
需求1:获取从n切换为b时最后一个n对应的x值
你的数据里有两次n转b的情况,以下代码可一次性获取所有对应值:
# 定位所有n→b的切换位置(前一个是n、后一个是b的索引) n_to_b_pos = which(df$z[-nrow(df)] == "n" & df$z[-1] == "b") # 提取对应最后一个n的x值 last_n_x = df$x[n_to_b_pos] # 输出结果:0.1 0.6
如果只需要最后一次n→b切换的对应x值,直接取last(last_n_x)即可得到0.6。
需求2:获取从b切换为m时第一个m对应的x值
# 定位b→m的切换位置(前一个是b、后一个是m的索引) b_to_m_pos = which(df$z[-nrow(df)] == "b" & df$z[-1] == "m") # 提取对应第一个m的x值 first_m_x = df$x[b_to_m_pos + 1] # 输出结果:1.1
另一种方法:用rle处理连续分组
如果数据有大量连续重复值,用游程编码rle会更清晰:
# 对z列做游程编码 z_rle = rle(df$z) # 计算每个连续组的起始和结束索引 group_starts = cumsum(c(1, z_rle$lengths))[-length(z_rle$lengths)+1] group_ends = cumsum(z_rle$lengths) # 获取n→b切换对应的最后一个n的x值 n_to_b_x = df$x[group_ends[which(z_rle$values[-length(z_rle$values)] == "n" & z_rle$values[-1] == "b")]] # 获取b→m切换对应的第一个m的x值 b_to_m_x = df$x[group_starts[which(z_rle$values[-length(z_rle$values)] == "b" & z_rle$values[-1] == "m")]]
内容的提问来源于stack exchange,提问作者user21189481
相关产品推荐
相关产品推荐

