m0_70800393 2023-04-10 01:44 采纳率: 75%
浏览 53
已结题

用R语言编写函数处理数据集

编写一个函数,它接受一个长度为2的参数x,并返回x的有序值。也就是说,如果x2<x1,则函数应返回c(x2,x1),否则应返回x。
使用您的函数处理一个包含2列的数据集,如下所示。在数据集的行上迭代,如果第i行第二列的元素小于第i行第一列的元素,则通过对刚刚编写的函数进行适当的调用来切换行中两个条目的顺序。(编写并使用自己的函数。不要使用内置函数order()或rev()。)使用以下数据进行测试。

Write a function which takes one argument x of length 2, and returns the ordered values of x. That is,
if x2 < x1, your function should return c(x2, x1), otherwise it should return x.
Use your function to process a dataset with 2 columns as follows. Iterate over the rows of the data set, and if
the element in the 2nd column of row i is less than the element in the first column of row i, switch the order
of the two entries in the row by making a suitable call to the function you just wrote. (Write and use your
own function. do NOT use the built in function order() or rev().)
Test using the following data.


set.seed(133)
data <- matrix(rnorm(20), byrow = T, ncol = 2)
data
           [,1]        [,2]
 [1,]  0.09038971  0.34725614
 [2,] -0.79411843  0.29461076
 [3,]  1.23784134 -0.04727337
 [4,]  1.02043216 -0.10186950
 [5,] -0.16825743 -1.36044740
 [6,]  1.38188126  1.22146600
 [7,] -1.15402098  0.83244954
 [8,] -0.62752890  1.18602495
 [9,] -0.14237337  0.54557331
[10,] -1.03012840 -0.28116993

  • 写回答

8条回答 默认 最新

  • 笙囧同学 2023-04-10 08:53
    关注

    以下是一个 R 函数,它接受一个长度为 2 的向量 x,返回排序后的值。也就是说,如果 x2<x1,则函数应返回 c(x2, x1),否则应返回 x。

    sort_x <- function(x) {
      if (x[1] > x[2]) {
        return(c(x[2], x[1]))
      } else {
        return(x)
      }
    }
    
    
    
    
    我们可以使用这个函数来处理包含 2 列的数据集。通过一个 for 循环迭代数据集的每一行,如果第 i 行的第二列元素小于第一列元素,我们就使用 sort_x 函数将这两个元素进行交换:
    
    
    ```c
    
    for (i in 1:nrow(data)) {
      if (data[i, 2] < data[i, 1]) {
        data[i, ] <- sort_x(data[i, ])
      }
    }
    
    
    
    

    这会给我们一个排序后的数据集,其中每一行的两列元素已经被正确排序。

    如果题主还有疑问的话,让我更详细地解释一下这个 R 函数是如何工作的。

    首先,我们定义了一个名为 sort_x 的函数,该函数接受一个长度为 2 的向量 x。函数检查向量的第一个元素是否大于第二个元素。如果是,函数使用 c 函数将第二个元素和第一个元素交换位置并返回一个新的排序向量。否则,函数返回原始向量 x。

    然后,我们使用 for 循环迭代数据集的每一行,并检查第二列元素是否小于第一列元素。如果是,我们使用 sort_x 函数将这两个元素进行交换。这是通过将第 i 行的数据传递给 sort_x 函数并将其返回的排序向量分配回第 i 行来完成的。在这种情况下,我们使用 R 中的子集符号 [i, ] 来选择第 i 行中的所有列。

    最后,我们打印出整个数据集,它现在已经按照我们的要求排序。

    说句闲话,再详细点

    首先,我们使用 set.seed(133) 函数设置了一个种子值,这个种子值可以让我们的代码在不同的计算机上产生相同的随机数。然后,我们使用 matrix() 函数创建了一个 10 行 2 列的矩阵,其中每个元素都是一个来自标准正态分布的随机数。我们使用 byrow = T 选项告诉 R 将每个随机数按行填充到矩阵中,这样矩阵看起来更像一个数据集。最后,我们使用 ncol = 2 选项指定矩阵应该有 2 列。

    然后我们得到了以下数据集:

    
    
               [,1]        [,2]
     [1,]  0.09038971  0.34725614
     [2,] -0.79411843  0.29461076
     [3,]  1.23784134 -0.04727337
     [4,]  1.02043216 -0.10186950
     [5,] -0.16825743 -1.36044740
     [6,]  1.38188126  1.22146600
     [7,] -1.15402098  0.83244954
     [8,] -0.62752890  1.18602495
     [9,] -0.14237337  0.54557331
    [10,] -1.03012840 -0.28116993
    
    

    接下来,我们可以定义 sort_x 函数,如下所示:

    sort_x <- function(x) {
      if (x[1] > x[2]) {
        return(c(x[2], x[1]))
      } else {
        return(x)
      }
    }
    
    
    

    该函数接受一个长度为 2 的向量 x,并将其按升序排序。如果第二个元素小于第一个元素,则函数返回第二个元素和第一个元素的组合,否则返回原始向量 x。

    最后,我们可以使用 for 循环迭代数据集的每一行,如果第二列元素小于第一列元素,则使用 sort_x 函数将这两个元素进行交换,如下所示:

    for (i in 1:nrow(data)) {
      if (data[i, 2] < data[i, 1]) {
        data[i, ] <- sort_x(data[i, ])
      }
    }
    
    
    

    好了,希望可以让你满意

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 已采纳回答 4月10日
  • 赞助了问题酬金15元 4月10日
  • 修改了问题 4月10日
  • 展开全部

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同