我正在使用两个.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')?
非常感谢任何帮助。
非常感谢。
答案 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