楼主: xjh_109
28248 6

[问答] R矩阵中如何对列进行调整顺序? [推广有奖]

  • 1关注
  • 0粉丝

高中生

60%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0.0001
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
345 点
帖子
19
精华
0
在线时间
38 小时
注册时间
2012-2-14
最后登录
2016-8-31

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如题:R矩阵中如何对列进行调整顺序?



我进行数据分析,矩阵数据是

        [,a] [,b] [,c] [,d]


[A,]    2    8   14   20


[B,]    4   10   16   22


[C,]    6   12   18   24


我的想法是怎么调换标题行a.b.c.d的顺序为a.c.b.d?




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:r矩阵 数据分析 如何

沙发
xjh_109 发表于 2016-5-17 21:19:12 |只看作者 |坛友微信交流群
自己坐沙发,哪位大神帮忙解决下?谢谢啦! 在线等啊!

使用道具

藤椅
wangfs111222 发表于 2016-5-17 21:48:07 来自手机 |只看作者 |坛友微信交流群
xjh_109 发表于 2016-5-17 21:19
自己坐沙发,哪位大神帮忙解决下?谢谢啦! 在线等啊!
a[,c(1,3,2,4)]

使用道具

板凳
阿璇tian 发表于 2018-10-25 10:57:20 |只看作者 |坛友微信交流群
这样好麻烦啊,如果有很多列,还要去数第几列,有没有简便的办法呢?

使用道具

报纸
foreverisold 发表于 2018-10-25 17:53:30 |只看作者 |坛友微信交流群
sqldf("select a.c.b.d from mydata   ")  需要什么列就选什么列

使用道具

地板
TAT12 发表于 2021-6-13 14:44:10 |只看作者 |坛友微信交流群
阿璇tian 发表于 2018-10-25 10:57
这样好麻烦啊,如果有很多列,还要去数第几列,有没有简便的办法呢?
dplyr的arrange和select函数,能够用列名重新排序

使用道具

7
keeponmoving 发表于 2021-12-6 16:01:18 |只看作者 |坛友微信交流群
答案如下:
#找到特征所在的位置
getColNumber<-function(data,colname="Class"){
    CN <- colnames(data)
    for (i in 1:ncol(data)){
        if (CN[i] == colname) {
            return (i)
        }
    }
    return (FALSE)
}

#将特征列移到最末
moveColToEnd<-function(data,colname="Class"){
    colNumber <- getColNumber(data,colname)
    data <- data[,c(1:(colNumber-1),(colNumber+1):ncol(data),colNumber)]

    return (data)
}

#调换两列特征的顺序
switchCol<-function(data,col1name,col2name){
    col1Number <- getColNumber(data,col1name)
    col2Number <- getColNumber(data,col2name)
    positionEnd = ncol(data)

    if (col2Number < col1Number) {
        tmp <- col1Number
        col1Number <- col2Number
        col2Number <- tmp
    }

    positionBeforCol1 <- col1Number -1
    positionAfterCol1 <- col1Number +1
    positionBeforCol2 <- col2Number -1
    positionAfterCol2 <- col2Number +1

    newOrder = c()
    if (positionAfterCol2 > ncol(data)){
        positionAfterCol2 = ncol(data)
        newOrder <- c(1:positionBeforCol1,col2Number,positionAfterCol1:positionBeforCol2,col1Number)
    } else {
        newOrder <- c(1:positionBeforCol1,col2Number,positionAfterCol1:positionBeforCol2,col1Number,positionAfterCol2:positionEnd)
    }
    dataNew <- data[,newOrder]

    return (dataNew)
}

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 06:02