是否可以使用一个.csv文件中的表中的坐标来删除第二个.csv文件中的列?

时间:2016-12-30 13:43:47

标签: r

我正在使用两个.csv文件;第一个是包含空间数据的矩阵,第二个是与第一个文件中定义的单元格相关的数据。我试图使用第一个文件通知第二个文件并将其自动化为脚本。第一个文件的示例如下:

   X1 X2 X3 X4 X5 
1   0  2  0  0  0
2   0  0  3  3  5
3   5  0  2  0  0
4   0  0  0  0  1
5   0  1  0  4  0 

然后我使用以下内容返回哪些坐标包含某个值(例如' 5'):

which(matrix==5, arr.ind=TRUE)

返回此内容:

    row col
3    3   1
2    2   5

我希望做的是使用这些信息(即,在这种情况下,哪些单元格包含' 5')来选择要在第二个文件中分析/绘制的数据。第二个文件的示例如下:

 Seconds    row1/col1   row1/col2   row1/col3   row1/col4   row1/col5
   0        60.32       60.11       59.85       60.04       61.01
   0.25     61.22       61.01       59.99       60.54       61.23
   0.5      62.45       61.87       60.34       61.02       61.99

我已经阅读了许多从第二个文件中删除列的方法,但是它非常大,因此从文件1返回的名称手动删除列是不可能的。是否可以根据第一个文件的输出删除或忽略第二个文件中的列(以便在第二个文件中只分析显示第一个文件中的' 5')?

非常感谢任何帮助。

非常感谢。

1 个答案:

答案 0 :(得分:1)

以下是一种方法:

m <- read.table(header=T, text="X1 X2 X3 X4 X5 
1   0  2  0  0  0
2   0  0  3  3  5
3   5  0  2  0  0
4   0  0  0  0  1
5   0  1  0  4  0")
idx <- which(m==0, arr.ind=TRUE)
df <- read.table(header=T, check.names=F, text="  Seconds    row1/col1   row1/col2   row1/col3   row1/col4   row1/col5
0        60.32       60.11       59.85       60.04       61.01
0.25     61.22       61.01       59.99       60.54       61.23
0.5      62.45       61.87       60.34       61.02       61.99")
cols <- paste0("row", idx[,1], "/col", idx[,2])
cols <- c(names(df)[1], intersect(names(df), cols))
df[,cols,drop=F]
#   Seconds row1/col1 row1/col3 row1/col4 row1/col5
# 1    0.00     60.32     59.85     60.04     61.01
# 2    0.25     61.22     59.99     60.54     61.23
# 3    0.50     62.45     60.34     61.02     61.99