楼主: qxhc
5902 7

[问答] R语言如何去除矩阵中相同的列 [推广有奖]

  • 1关注
  • 0粉丝

高中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
310 点
帖子
23
精华
0
在线时间
30 小时
注册时间
2014-10-19
最后登录
2016-12-28

楼主
qxhc 发表于 2016-12-22 21:10:10 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
RT
这个可能有多个列

  1. x1<-c(rep("A",5),rep("B",6),rep("C",5),rep("D",5),rep("E",6),
  2.       rep("F",5),rep("G",6))

  3. x3<-c(1:5,1:6,1:5,1:5,1:6,1:5,1:6)
  4. x2 <- x3
  5. x4<- x1
  6. x5<-sample(seq(0.1,0.9,0.1),38,rep=T)
  7. data1<-cbind(x1,x2,x3,x4,x5)
复制代码
去除后
  1. data2<-cbind(x1,x3,x5)
复制代码
这样的形式
二维码

扫码加我 拉你入群

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

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

关键词:R语言 如何 R语言

沙发
止水之涯 发表于 2016-12-22 23:29:00 |只看作者 |坛友微信交流群
刚开始学习R语言不久,没找到合适的函数一步实现,自己尝试着编写了一个小函数,可以实现你要的功能,虽然比较low...
  1. > head(data1)
  2.      x1  x2  x3  x4  x5   
  3. [1,] "A" "1" "1" "A" "0.1"
  4. [2,] "A" "2" "2" "A" "0.2"
  5. [3,] "A" "3" "3" "A" "0.5"
  6. [4,] "A" "4" "4" "A" "0.5"
  7. [5,] "A" "5" "5" "A" "0.4"
  8. [6,] "B" "1" "1" "B" "0.8"
  9. > my_fun <- function(x,...) {
  10. +   n <- ncol(x)
  11. +   index <- rep(TRUE,n)
  12. +   for (i in n:2) {
  13. +     for (j in 1:(i-1)) {
  14. +       if(sum(!(x[,j] == x[,i])) == 0) {
  15. +         index[i] <- FALSE
  16. +         break
  17. +       }
  18. +     }
  19. +   }
  20. +   return(x[,index])
  21. + }
  22. > data2 <- my_fun(data1)
  23. > head(data2)
  24.      x1  x2  x5   
  25. [1,] "A" "1" "0.1"
  26. [2,] "A" "2" "0.2"
  27. [3,] "A" "3" "0.5"
  28. [4,] "A" "4" "0.5"
  29. [5,] "A" "5" "0.4"
  30. [6,] "B" "1" "0.8"
复制代码




已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
2017110138 + 5 + 4 + 4 + 4 精彩帖子
李会超 + 80 热心帮助其他会员

总评分: 经验 + 80  论坛币 + 5  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

使用道具

藤椅
zhou1_20 发表于 2016-12-23 09:14:36 |只看作者 |坛友微信交流群
  1. data1[,!duplicated(t(data1))]
复制代码

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
2017110138 + 5 + 4 + 4 + 4 精彩帖子
李会超 + 100 精彩帖子

总评分: 经验 + 100  论坛币 + 5  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

使用道具

板凳
ntsean 发表于 2016-12-23 12:10:05 |只看作者 |坛友微信交流群
  1. t(unique(t(data1))
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
2017110138 + 5 + 4 + 4 + 4 精彩帖子
李会超 + 100 精彩帖子

总评分: 经验 + 100  论坛币 + 5  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

使用道具

报纸
qxhc 发表于 2016-12-24 16:50:15 |只看作者 |坛友微信交流群
ntsean 发表于 2016-12-23 12:10
哈哈,我也是这么写的,但是感觉好流氓

使用道具

地板
deephilla 发表于 2016-12-25 01:34:35 |只看作者 |坛友微信交流群
哈哈 有高人

使用道具

7
cheetahfly 在职认证  发表于 2016-12-26 09:17:55 |只看作者 |坛友微信交流群
你确定数据类型是要“矩阵”吗?看你的例子中,数字都被转换成了字符,你确定这是你想要的吗?
因为如果是dataframe数据类型,事情是有所不同,尝试以下例子:
  1. > data1 <- data.frame(a = 1L:10L, b = as.double(1:10), c = as.character(1:10), d = factor(1:10), stringsAsFactors = FALSE)

  2. # 看看数据
  3. > data1
  4.     a  b  c  d
  5. 1   1  1  1  1
  6. 2   2  2  2  2
  7. 3   3  3  3  3
  8. 4   4  4  4  4
  9. 5   5  5  5  5
  10. 6   6  6  6  6
  11. 7   7  7  7  7
  12. 8   8  8  8  8
  13. 9   9  9  9  9
  14. 10 10 10 10 10

  15. #仔细看看数据
  16. > str(data1)
  17. 'data.frame':        10 obs. of  4 variables:
  18. $ a: int  1 2 3 4 5 6 7 8 9 10
  19. $ b: num  1 2 3 4 5 6 7 8 9 10
  20. $ c: chr  "1" "2" "3" "4" ...
  21. $ d: Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10
复制代码
这种情况直接用上面的方法就不行了。

使用道具

8
qxhc 发表于 2016-12-28 15:33:37 |只看作者 |坛友微信交流群
cheetahfly 发表于 2016-12-26 09:17
你确定数据类型是要“矩阵”吗?看你的例子中,数字都被转换成了字符,你确定这是你想要的吗?
因为如果是 ...
谢谢提醒,我的意思都是数字的,我的例子有问题

使用道具

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

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

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

GMT+8, 2024-6-17 09:08