我有一台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)

我try 了一个for循环来解决这个问题,但无法理解for循环如何与子集的Tibble数据交互:

for (rows in 1:4)
  my_range <- max(my_tibble[rows, 1:4]) - min(my_tibble[rows, 1:4])

总而言之,我想要尽可能多的方式在Tibble的新列中显示max-min(即范围).

推荐答案

在基数R中,您可以在apply语句中使用diffrange:

my_tibble$rngdiff <- apply(my_tibble, 1, function(x) diff(range(x)))

diff(range(x))找出输入的范围并取差值.索引设置为1apply函数跨每行执行该函数.输出:

# A tibble: 5 × 5
   col1  col2  col3  col4  rngdiff
  <int> <int> <int> <int>    <int>
1     1     6    11    16       15
2     2     7    12    17       15
3     3     8    13    18       15
4     4     9    14    19       15
5     5    10    15    20       15

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

my_tibble$diffloop <- NA
for(rows in seq_len(nrow(my_tibble))){
  my_tibble$diffloop[rows] <- max(my_tibble[rows, 1:4]) - min(my_tibble[rows, 1:4])
  # or
  # my_tibble$diffloop[rows] <- diff(range(my_tibble[rows, 1:4]))
}

(不过,根据记录,我认为您不应该在这里使用for个循环)

R相关问答推荐

使用spatVector裁剪网格数据时出现的问题

selectInput不返回ALL,并将因子转换为shiny 的数字

如何编辑ggplot的图例字使用自定义对象(gtable)?'

lightgbm发动机在tidymmodels中的L1正则化""

如何在一次运行中使用count进行多列计数

未识别时区

多个过滤器内的一个盒子在仪表板Quarto

在ggplot2的框图中绘制所有级别的系数

函数可以跨多个列搜索多个字符串并创建二进制输出变量

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

在R中创建连续的期间

在带有`R`中的`ggmosaic`的马赛克图中使用图案而不是 colored颜色

按组计算列中1出现的间隔年数

有没有办法定制Plot(allEffects())面板标题?

网络抓取新闻标题和时间

在r中整理图例和堆叠图的问题

R中的Desolve:返回的导数数错误

如何在刻面和翻转堆叠条形图中对齐geom_text()

在REST API中使用参数R

R中从因数到数字的转换