如何根据从列中获取的字符串变量对数据框的列进行排序

时间:2019-08-30 10:43:12

标签: r data.table

我想根据另一个数据框的列中给定的文本变量对数据框的列进行排序(使用srtcolorder中的data.table)。假设我有第一个数据帧(df1),其列的名称和顺序分别为“五个”,“两个”,“三个”,“一个”,“四个”,并具有另一个数据帧,其中的列({ {1}}),包含按“ 1”,“ 2”,“ 3”,“ 4”,“ 5”排序的字符串变量。如何根据{{1 }}?

我尝试如下使用df2$names

df2$names

并收到错误消息

  

setcolorder(df1,key = df2 $ names)中的错误:   未使用的参数(键= df2 $ names)

2 个答案:

答案 0 :(得分:0)

由于未提供任何数据,因此我创建了虚拟数据帧来模拟您要重新排列的数据。

第一个数据帧if($num_row>5){ $count=0; $index=1; while($count < $num_row && $index <= 5){ ?> <button id="<?php echo $count; ?>" class="index_b"><?php echo $index; ?></button> <?php $count = $count + 5; $index++; } } 包含字符列df1fivetwothreeone订单:

four

第二个数据帧df1 <- data.frame( five = character(), two = character(), three = character(), one = character(), four = character() ) 包含一个标题为df2的列,其列名在names中按其数值对等排序。

df1

可以使用包含列索引或列名称的有序向量对数据帧进行排序。在这种情况下,我们可以调用df2 <- data.frame(names = c('one', 'two', 'three', 'four', 'five'))df1[, as.character(df2$names)]的列进行排序。 df1用于将as.character()列名称的因子向量转换为字符串向量。

如果您热衷于使用df1,可以致电data.table::setcolorder()。此方法的优点是您不必将结果数据帧分配给变量setcolorder(df1, as.character(df2$names))。您的尝试没有用,因为(1)df1函数没有key参数(只有setcolorder()),并且(2)您的neworder可能是一个因素向量(您可以通过调用df2$names进行检查)。

答案 1 :(得分:0)

我感谢大家的答复。我明白我的错误。 df2 $ names中的字符串之前偶尔有一些空格,在屏幕上看不到。因此,此列中的文本与df1中的列名称不匹配。我还记得“隐形”空间存在的类似问题,只是凭直觉尝试gsub(" ", "" df2$names)来删除它们。此后,df3<-setcolorder(df1, neworder=key(as.character(df2[["names"]]))运作良好。 再次谢谢大家。