我有一个 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)
总之,我希望有尽可能多的方式在小标题的新列中显示最大最小值(即范围)。
在基本 R 中,您可以在语句中使用diffwith :rangeapply
my_tibble$rngdiff <- apply(my_tibble, 1, function(x) diff(range(x)))\nRun Code Online (Sandbox Code Playgroud)\ndiff(range(x))找到输入的范围并求差。apply设置了索引的函数在1每一行上执行该函数。输出:
# 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\nRun Code Online (Sandbox Code Playgroud)\n您建议的for循环不起作用有两个主要原因:(1) 您没有建立索引,my_range因此它会覆盖每次迭代;(2) 您的rows索引未覆盖总行数(有 5 行)。更正后的for循环语句可能是:
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}\nRun Code Online (Sandbox Code Playgroud)\n(尽管作为记录,我认为你不应该for在这里使用循环)