1

我有以下 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 而不是那些 X

4

3 回答 3

2

将数据读入名为“indat”的数据帧后

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

如果列不大于 0-9 将起作用。如果它们的字符值更大,你会在那个网络中得到“11”或“21”,所以可能需要更复杂的东西:

 smallerdat <- indat[ grep("^X1$|^X2$|X1\\.|X2\\." , names(indat) ) ]
于 2012-11-25T21:49:16.973 回答
2

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

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

其中表 [1] 是表的第一列,表 [2] 是第二列,依此类推。

因为 cbind() 需要尽可能多的参数。

如果你喜欢的话,然后命名列;

colnames(newtable) <- list("First", "Second", "Third")
于 2019-09-01T23:09:33.463 回答
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

希望能帮助到你!:)

于 2012-11-25T20:56:15.937 回答