You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:05:08