用R语言删除csv格式的列

时间:2012-11-25 20:14:28

标签: r csv

我有csv格式的下表:

我在csv格式表中有以下基因信息:

                    1       3       1       2     2         3
1415670_at  1   365.1   293.4   288.9   394.5   312     381.6
1415671_at  2   556.1   584.2   567.8   592.8   471.6   513.1
1415672_at  3   1048.3  763.1   1074.9  852.3   826.1   898.3
1415673_at  4   60.8    51.7    51.6    224     248.4   150.7
1415674_at  5   129.1   107.2   230.4   175.5   250.5   172.4

正如您所看到的,我得到了一些标有1,2和3的列。我制作了一个VB脚本,用于删除Excel中与1和2不同的列。我的问题是如何只使用R来做到这一点?所以我的结果表将是:

                    1   1       2          2        
1415670_at  1   365.1   293.4   394.5     312       
1415671_at  2   556.1   584.2   592.8   471.6   
1415672_at  3   1048.3  763.1   852.3   826.1   
1415673_at  4   60.8    51.7    224     248.4   
1415674_at  5   129.1   107.2   175.5   250.5   

顺便说一句,这只是一个例子,我可以将其他列标记为4,5和6,但我只想保留那些标记为1和2的列

我已尝试过发布的解决方案,即使用:

m<-read.csv("test1.csv")
smallerdat <- m[ grep("^X1$|^X2$|X1\\.|X2\\." , names(m) ) ]

其中m是csv格式的表,但我得到的结果是:

    X1  X1.1        X2      X2.2        
365.1   293.4   394.5     312       
556.1   584.2   592.8   471.6   
1048.3  763.1   852.3   826.1   
60.8    51.7    224     248.4   
129.1   107.2   175.5   250.5

所以它删除了我需要的前两列。如何不删除这些列?以及如何保持原始格式,我的意思是标题中只有1和2而不是那些Xs

3 个答案:

答案 0 :(得分:2)

将数据读入名为“indat”

的数据框后
 smallerdat <- indat[ grep("^X1|^X2", names(indat) )]

如果列不大于0-9,则可以正常工作。如果它们的字符值更大,那么你将在该网络中获得“11”或“21”,因此可能需要更复杂的东西:

 smallerdat <- indat[ grep("^X1$|^X2$|X1\\.|X2\\." , names(indat) ) ]

答案 1 :(得分:2)

只需使用cbind()合并尽可能多的表列即可。

newtable <- cbind( table[1], table[2], table[3], ..)

其中table [1]是表的第一列,而table [2]是第二列,等等。

正如cbind()一样,您可以根据需要选择尽可能多的参数。

然后根据需要命名列;

colnames(newtable) <- list("First", "Second", "Third")

答案 2 :(得分:0)

马诺洛,

您必须将数据读入数据框并删除列。您唯一需要考虑的是列名称不能相同。

# Your data
data <- read.table(text = "1       3       1       2       2       3
                           365.1   293.4   288.9   394.5   312     381.6
                           556.1   584.2   567.8   592.8   471.6   513.1
                           1048.3  763.1   1074.9  852.3   826.1   898.3
                           60.8    51.7    51.6    224     248.4   150.7
                           129.1   107.2   230.4   175.5   250.5   172.4",
        header=TRUE, sep="", nrows=5)

之后如果你运行

print(data)

你将获得

      X1    X3   X1.1    X2  X2.1  X3.1
1  365.1 293.4  288.9 394.5 312.0 381.6
2  556.1 584.2  567.8 592.8 471.6 513.1
3 1048.3 763.1 1074.9 852.3 826.1 898.3
4   60.8  51.7   51.6 224.0 248.4 150.7
5  129.1 107.2  230.4 175.5 250.5 172.4

如果使用

删除名为X3和X3.1的列
data <- data[, !(colnames(data) %in% c("X3","X3.1"))]

并执行

print(data)

你现在会得到

      X1   X1.1    X2  X2.1
1  365.1  288.9 394.5 312.0
2  556.1  567.8 592.8 471.6
3 1048.3 1074.9 852.3 826.1
4   60.8   51.6 224.0 248.4
5  129.1  230.4 175.5 250.5

希望它有所帮助! :)