【问题标题】:Is there an R function that reads a specific value and move to the next column?是否有读取特定值并移至下一列的 R 函数?
【发布时间】:2020-05-27 14:39:05
【问题描述】:

我想知道 R 是否可以在矩阵中按列读取特定值(该值在移动到下一列之前只会读取一个特定值(大于 x))。在移动到下一列之前,该值只能被确认一次。

插图

          C1  C2  C3

R1        (10,15*,5)

R2        (20*,10,5)

R3        (5,10,20*)

15 及以上的值将根据列被考虑一次。

预期结果:

[1] 20, 15, 20

感谢您的支持!

【问题讨论】:

  • 你期望什么输出?
  • 嗨,Darren,我想在 R 代码中显示 20,15 和 20 的输出。

标签: r matrix multiple-columns


【解决方案1】:

以下代码可以查找值,直到每列第一次出现值>=15。

apply(m, 2, function(x) x[1:which.max(x >= 15)])

# [[1]]
# [1] 10 20
# 
# [[2]]
# [1] 15
# 
# [[3]]
# [1]  5  5 20

如果你想要>= 15的第一个值,那么

apply(m, 2, function(x) x[which.max(x >= 15)])

# [1] 20 15 20

数据

m <- matrix(c(10, 20, 5, 15, 10, 10, 5, 5, 20), 3)

【讨论】:

  • 我似乎收到一条错误消息“错误:意外'[[' in "[[""
  • 我之前打错了,代码现在正在运行。非常感谢达伦!
  • 嘿达伦,我可以将此代码应用于 5 x 5 矩阵以获得类似的结果吗?如果有两个大于 15 的值并且我们想根据列独立选择会发生什么(选择的值将移动到与前一行不同的行)。提前致谢。
  • @Fincoder07 当然,您可以在任何维度的矩阵上使用我的代码。至于您的第二个问题,您能否提供示例数据和预期输出?
  • 嘿 Darren,这是一个示例数据,预期输出为 16*,17*,18*,19*,10*+10* Col1 Col2 Col3 Col4 Col5 Row1 16* 12 16 6 8 Row2 16 10 8 17 10* Row3 12 13 18* 9 17 Row4 13 7 12 19* 15 Row5 7 17* 15 15 13 Row6 14 3 10 6 10* Sum 16 17 18 19 20 Col 5 将使用 Row 的总和2 和第 6 行的值超过 15 (20)
【解决方案2】:

您可以在转置数据后使用max.col 并创建一个行/列矩阵来从每一列中提取数据的子集。使用@Darren 的数据:

m[cbind(max.col(t(m) >= 15, ties.method = 'first'), 1:ncol(m))]
#[1] 20 15 20

阅读?max.col 中的ties.method 以了解如何处理平局。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 2020-07-29
    • 2023-01-25
    • 1970-01-01
    • 2022-09-24
    • 2021-12-12
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多