【问题标题】:Reorder attributes of data table重新排序数据表的属性
【发布时间】:2023-03-06 02:57:01
【问题描述】:

考虑以下数据表

t <- data.table(user1 = c(1,2), user3 = c(5,6), user2=c(3,4))

这将使t[[1]] = t$user1 , t[[2]] = t$user3 , t[[3]] = t$user2

如何对 t 的属性进行排序以生成 t[[2]] = t$user2 , t[[3]] = t$user3

原因是我想循环遍历属性(假设遍历所有 userx),同时保持其顺序 x 以供进一步使用。

我的循环是

for (i in 1: length(t)) 
{#i is used here}

而不是

for (attr in names(t))

有没有办法在 R 中实现这一点?

【问题讨论】:

  • ?data.table::setcolorder
  • 完美,@mt1022。事实上,我的属性排序为:abc_user、def_user、Others、user1、user2、user3、.. user100。我想在最后推送Others,同时保留其余部分。在不明确指出所有用户的情况下如何做到这一点?
  • 类似setcolorder(t, c(names(t)[names(t) != 'Others'], 'Others'))?
  • 迷人。谢谢@mt1022

标签: r loops attributes data.table


【解决方案1】:

由于您想放置一个变量(在您的情况下为“其他”),您可以简单地生成一个新变量,该变量将自动放置为最后一列。然后您可以删除原始变量(“其他”)并重命名新生成的变量。以您提供的示例为例:

t <- data.table(user1 = c(1,2), user3 = c(5,6), user2=c(3,4))
t$user4<- t$user3
t$user3<-NULL
names(t)[names(t) == "user4"] <- "user3"
t
##    user1 user2 user3
## 1:     1     3     5
## 2:     2     4     6

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2019-12-10
    • 2022-01-27
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多