【问题标题】:Filling empty vector with values of another vector given similar (not the same) values给定相似(不相同)值的另一个向量的值填充空向量
【发布时间】:2016-11-22 17:31:59
【问题描述】:

我有三个向量:

x1 <- c(0.000, 0.792, 1.451, 1.802, 2.551, 2.591, 3.991, 4.321)
x2 <- c(0.8, 2.6)
x3 <- c(3,6,-1)

我想创建另一个向量 (x4),其长度与 x1 相同,并填充来自 x3 的值,但 3s 变为 6s 和 6s 变为 @当x2 中的值非常接近x1 时为987654328@s,但不一定相同。然后,x4 将如下所示:

   x1  x4
0.000   3
0.792   3 #0.8 in x2 is close to 0.792 x1, so this is the last place 3 appears
1.451   6
1.802   6
2.551   6
2.591   6 #2.6 in x2 is close to 2.591 x1, so this is the last place 6 appears
3.991  -1
4.321  -1

关键是x2中的值需要与x1中的值接近才能启动x3中的值之间的变化,不一定完全相同,并在x4中添加。如果x1 中的值不接近x2,则x4 中的值不会在x3 中的值之间变化。

对不起,我希望这是有道理的,但如果有人知道该怎么做,将不胜感激!

【问题讨论】:

  • 投反对票的原因是什么?评论很有​​礼貌。
  • @Brandon Bertelsen 我也不确定,当我看到它被否决时有点震惊 =/

标签: r vector


【解决方案1】:

您可以使用cut

x4 <- cut(x1, c(-Inf, x2, Inf), labels = x3, right = FALSE)

x4
# [1] 3  3  6  6  6  6  -1 -1
# Levels: 3 6 -1

当心,结果将是因素。

如果您想将它们转换为数字,您可以使用:

as.numeric(levels(x4))[x4]

# [1]  3  3  6  6  6  6 -1 -1

关闭时,我假设您的意思是这些值在区间内(- Inf 到 0.8 ; 0.8 到 2.6 ; 2.6 到 Inf)

【讨论】:

  • 效果很好!我唯一需要更改的是Inf 更改为9999(正面和负面),因为由于某种原因它不适用于Inf。此外,我也在处理十进制数,不得不将x4 更改为character(),然后再更改为numeric()。但最终解决了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
相关资源
最近更新 更多