R中按行计算范围

Sta*_*oss 4 r range tibble

我有一个 4x4 tibble,我正在上面练习各种 dplyr 功能。

我想计算每行的范围,并将该行的范围显示为新列中的单个数字。

这是我的代码:

my_tibble <- data.frame(col1 = c(1:5), col2 = c(6:10), col3 = c(11:15), col4 = c(16:20))
my_tibble <- as_tibble(my_tibble)
Run Code Online (Sandbox Code Playgroud)

我尝试使用 for 循环来解决这个问题,但无法理解 for 循环如何与子集的 tibble 数据交互:

for (rows in 1:4)
  my_range <- max(my_tibble[rows, 1:4]) - min(my_tibble[rows, 1:4])
Run Code Online (Sandbox Code Playgroud)

总之,我希望有尽可能多的方式在小标题的新列中显示最大最小值(即范围)。

jps*_*ith 5

在基本 R 中,您可以在语句中使用diffwith :rangeapply

\n
my_tibble$rngdiff <- apply(my_tibble, 1, function(x) diff(range(x)))\n
Run Code Online (Sandbox Code Playgroud)\n

diff(range(x))找到输入的范围并求差。apply设置了索引的函数在1每一行上执行该函数。输出:

\n
# A tibble: 5 \xc3\x97 5\n   col1  col2  col3  col4  rngdiff\n  <int> <int> <int> <int>    <int>\n1     1     6    11    16       15\n2     2     7    12    17       15\n3     3     8    13    18       15\n4     4     9    14    19       15\n5     5    10    15    20       15\n
Run Code Online (Sandbox Code Playgroud)\n

您建议的for循环不起作用有两个主要原因:(1) 您没有建立索引,my_range因此它会覆盖每次迭代;(2) 您的rows索引未覆盖总行数(有 5 行)。更正后的for循环语句可能是:

\n
my_tibble$diffloop <- NA\nfor(rows in seq_len(nrow(my_tibble))){\n  my_tibble$diffloop[rows] <- max(my_tibble[rows, 1:4]) - min(my_tibble[rows, 1:4])\n  # or\n  # my_tibble$diffloop[rows] <- diff(range(my_tibble[rows, 1:4]))\n}\n
Run Code Online (Sandbox Code Playgroud)\n

(尽管作为记录,我认为你不应该for在这里使用循环)

\n