我想根据另一个数据框的列中给定的文本变量对数据框的列进行排序(使用srtcolorder
中的data.table
)。假设我有第一个数据帧(df1)
,其列的名称和顺序分别为“五个”,“两个”,“三个”,“一个”,“四个”,并具有另一个数据帧,其中的列({ {1}}),包含按“ 1”,“ 2”,“ 3”,“ 4”,“ 5”排序的字符串变量。如何根据{{1 }}?
我尝试如下使用df2$names
:
df2$names
并收到错误消息
setcolorder(df1,key = df2 $ names)中的错误: 未使用的参数(键= df2 $ names)
答案 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++;
}
}
包含字符列df1
,five
,two
,three
和one
订单:
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"]]))
运作良好。
再次谢谢大家。