在R中向矩阵中添加新列

7

我有一个只有一列的矩阵:

> Control_Title_name

vehicle_scan_id4
153 "CL2004060801AA"
155 "CL2004060801AA"
232 "EC2004102602AA"

我想添加一个新列(名为“Class”),格式如下:
> Control_Title_name

vehicle_scan_id4 Class
        153 "CL2004060801AA" "Control"
        155 "CL2004060801AA" "Control"
        232 "EC2004102602AA" "Control"

第一列(“vehicle_scan_id4”)的长度是可变的,因此我希望“Control”出现在第二列(“Class”)中的每一行作为一个值。
> Phenodata
    Name                 FileName             Target     
153 "EC2004060203AA.CEL" "EC2004060203AA.CEL" "Treatment"
155 "EC2004060205AA.CEL" "EC2004060205AA.CEL" "Treatment"
232 "EC2004102606AA.CEL" "EC2004102606AA.CEL" "Treatment"
153 "CL2004060801AA.CEL" "CL2004060801AA.CEL" "Control"  
155 "CL2004060801AA.CEL" "CL2004060801AA.CEL" "Control"  
232 "EC2004102602AA.CEL" "EC2004102602AA.CEL" "Control"

这是我的最终矩阵的样子。有没有办法根据它们的值而不是 row.names 来过滤出唯一的行?例如,第4行和第5行包含完全相同的值。我的新矩阵只包含其中一个,而不是两个,这是否可能?

Control_Title_name$Class = "Control" 这是您想要做的吗? - Sidhha
目前我的矩阵只包含一个名为"vehicle_scan_id4"的列,我想在同一矩阵中添加另一列,其中包含一个字符("Control"),并且它会在第一列的长度中复制。 - user3253470
2个回答

12

您可以使用cbind()来实现:

Control_Title_name <- matrix(c('CL2004060801AA','CL2004060801AA','EC2004102602AA'),3,dimnames=list(c('153','155','232'),c('vehicle_scan_id4')));
Control_Title_name;
##     vehicle_scan_id4
## 153 "CL2004060801AA"
## 155 "CL2004060801AA"
## 232 "EC2004102602AA"
Control_Title_name <- cbind(Control_Title_name,Class='Control');
Control_Title_name;
##     vehicle_scan_id4 Class
## 153 "CL2004060801AA" "Control"
## 155 "CL2004060801AA" "Control"
## 232 "EC2004102602AA" "Control"

回答你的第二个问题:

Control_Title_name[,'vehicle_scan_id4'] <- paste0(Control_Title_name[,'vehicle_scan_id4'],'.CEL');
Control_Title_name;
##     vehicle_scan_id4     Class
## 153 "CL2004060801AA.CEL" "Control"
## 155 "CL2004060801AA.CEL" "Control"
## 232 "EC2004102602AA.CEL" "Control"

我如何在第一列(vehicle_scan_id4)的每个值末尾添加“.CEL”?使得这些值变成CL2004060801AA.CEL ... EC2004102602AA.CEL? - user3253470
你能否看一下这个问题的最后一个答案?我已经询问了关于过滤的问题,如果您也能在这个背景下帮助我,那就太好了。 - user3253470
我也找到了解决方案:Unique_Phenodata <- Phenodata[!duplicated(Phenodata[,1]),] - user3253470
你能帮我解决这个问题吗?[http://stackoverflow.com/questions/35484595/data-frame-merge-and-selection-of-values-which-are-common-in-2-data-frames] - user3253470

0

替代方案

library(dplyr) 

Control_Title_name %>% 
  as.data.frame() %>% 
  mutate(Class='Control')

   vehicle_scan_id4   Class
1   CL2004060801AA Control
2   CL2004060801AA Control
3   EC2004102602AA Control

我该如何在第一列(vehicle_scan_id4)的每个值末尾添加“.CEL”?这样,这些值就会变成CL2004060801AA.CEL ... EC2004102602AA.CEL。 - user3253470

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接