我使用的是从空间网格系统中获得的数据,例如一个城市被划分为等距的正方形(例如250m2的单元)。每个单元格都有一个唯一的列和行编号,以及关于这个250m2广场内所包含区域的相应数字信息(例如整个城市中每个单元格的温度)。在整个网格区域(或示例城市)内,我有各种研究地点,并且我知道它们的位置(即每个地点所在的单元格行和列)。我有一个包含城市内所有单元格信息的数据框,但我想将其子集化,以仅包含我的研究地点所在单元格的信息。我之前问过一个关于这个的问题
Matching information from different dataframes and filtering out redundant columns
'. 下面是一些示例代码:
###Dataframe showing cell values for my own study sites
Site <- as.data.frame(c("Site.A","Site.B","Site.C"))
Row <- as.data.frame(c(1,2,3))
Column <- as.data.frame(c(5,4,3))
df1 <- cbind(Site,Row, Column)
colnames(df1) <- c("Site","Row","Column")
###Dataframe showing information from ALL cells
eg1 <- rbind(c(1,2,3,4,5),c(5,4,3,2,1)) ##Cell rows and columns
eg2 <- as.data.frame(matrix(sample(0:50, 15*10, replace=TRUE), ncol=5)) ##Numerical information
df2 <- rbind(eg1,eg2)
rownames(df2)[1:2] <- c("Row","Column")
output <- df2[, (df2['Row', ] %in% df1$Row) & (df2['Column', ] %in% df1$Column)]
names(output) <- df1$Site[mapply(function(r, c){which(r == df1$Row & c == df1$Column)}, output[1,], output[2,])]
然而,我无法将此应用于我自己的数据,也无法找出原因。
编辑:最初,我认为列命名有问题(即“名称”函数)。但似乎“输出”代码行可能存在问题,其中包含了不应该包含的来自df2的列(即,输出包含了df2中的列,这些列拥有df1中未指定的列和行编号)。
我还尝试过:
output <- df2[, (df2['Row', ] == df1$Row) & (df2['Column', ] == df1$Column)]
但是,当使用我自己的(看似可比较的)数据时,我并没有从“df1”等效项中指定的所有单元格中获取信息(尽管在上面的示例数据中同样可以很好地工作)。如果我单独处理每个研究站点,我可以获得我自己的数据。
SiteA <- df2[, which(df2['Row', ] == 1) & (df2['Column', ] == 5)]
SiteB <- df2[, which(df2['Row', ] == 2) & (df2['Column', ] == 4)]
SiteC <- df2[, which(df2['Row', ] == 3) & (df2['Column', ] == 3)]
但我有1000多个网站,希望能有一种更简洁的方式。我确信我保持了相同的结构、拼写和变量名。有人能解释我可能做错的潜在事情吗?或者用另一种方法失败?
很抱歉,没有为实际问题提供示例代码(我希望我能指出具体问题是什么,但在那之前,原始示例是我能做的最好的)!非常感谢。