【发布时间】:2016-11-15 13:18:41
【问题描述】:
我有一个数字向量:
x <-c(-18.695, -18.695, 19.477, 0.000, 55.000, 19.477, -18.695, 48.476, 55.000, 37.798, -18.695, 19.477, 37.798, 0.000, -18.695)
和一个因子向量,其水平从levels 函数返回,是:
y <- c("IV-18_7", "IV00", "IV00orig", "IV19_5", "IV37_8", "IV37_8_yp", "IV48_5", "IV48_5_yp", "IV55")
我需要构建一个新的因子向量z,长度与x 相同,但具有y 中列出的级别,并且z 的第i 个元素z[i]是y 与x、x[i] 的对应元素“最相似”的元素。换句话说:
z <-factor(c("IV-18_7", "IV-18_7", "IV19_5", "IV00", "IV55", "IV19_5", "IV-18_7", "IV48_5", "IV55", "IV37_8", "IV-18_7", "IV19_5", "IV37_8", "IV00", "IV-18_7"), levels = y)
这个例子应该让“最相似”的意思相当明显,反正想法是取一个元素x[i],然后寻找y的元素,它是通过添加一个“IV”前缀得到的,然后添加一个与x[i] 的舍入“相似”的字符串(但不幸的是,不完全相等),最后在数字部分之后没有任何后缀。我不知道如何在 R 中有效地编写代码,您能帮帮我吗?
【问题讨论】:
-
这将使您非常接近您的示例:
paste0("IV", gsub(".", "_", gsub("\\.0$", "", sprintf("%04.1f", round(x, 1))), fixed=TRUE)) -
它看起来不仅非常接近而且就在现场!谢谢!您为什么不将其写为答案并解释单件的作用? (对我来说)很难理解单行。