Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过另一个矩阵从一个矩阵中提取信息_R_Matrix_Extract - Fatal编程技术网

R 通过另一个矩阵从一个矩阵中提取信息

R 通过另一个矩阵从一个矩阵中提取信息,r,matrix,extract,R,Matrix,Extract,我有两个矩阵,一个是物种x特征,第二个是地点x物种(存在/不存在)。我需要第三个矩阵站点x特征,在每列中,我将有多个值(一个站点中所有物种的所有值)。我该怎么做?通过另一个矩阵提取一个矩阵的信息?我只是一个初学者在R 我将位点x物种和cbind2个矩阵进行了转换,但结果是所有列都在一个矩阵中 trait <- read.table("trait_matrix_final.txt", head=T, sep="\t", dec=',', row.names=1) com <- re

我有两个矩阵,一个是物种x特征,第二个是地点x物种(存在/不存在)。我需要第三个矩阵站点x特征,在每列中,我将有多个值(一个站点中所有物种的所有值)。我该怎么做?通过另一个矩阵提取一个矩阵的信息?我只是一个初学者在R

我将位点x物种和
cbind
2个矩阵进行了转换,但结果是所有列都在一个矩阵中

trait <- read.table("trait_matrix_final.txt", head=T, sep="\t", dec=',', row.names=1)
com   <- read.table("community_matrix2.txt",  head=T, sep="\t", dec=',', row.names=1)
comt  <- t(com)
new   <- cbind(trait, comt)

trait提供一个能够帮助您解决问题的社区将非常有用

编辑后: 只有当矩阵的所有条目都属于同一类时(例如,所有
数值
或所有
字符
),才应将数据存储在类
矩阵
的对象中。因为第一个矩阵既有数值也有字符值,所以最好将其格式化为
data.frame
。有关更多信息,请参阅

我将生成一些数据,假设每个物种有5个特征,每个站点有20个物种,以及10个站点:

n.traits <- 5
n.species <- 20
n.sites <- 10

traits.names <- paste ("trait", 1:n.traits, sep = "_")
species.names <- paste ("spec", 1:n.species, sep = "_")
sites.names <- paste ("site", 1:n.sites, sep = "_")


# species*traits matrix
set.seed (4)
mat1 <- as.data.frame (matrix (replicate (n = n.traits, rnorm (n = n.species)), nrow = n.species, ncol = n.traits, dimnames = list (species.names, traits.names)))
mat1
set.seed (89)
mat1[, 2] <- sample (x = c ("diurnal", "nocturnal"), size = nrow (mat1), replace = T)
mat1

# site*species matrix
set.seed (6)
mat2 <- matrix (replicate (n = n.species, rbinom (n = n.sites, size = 1, prob = 0.8)), nrow = n.sites, ncol = n.species, dimnames = list (sites.names, species.names))
mat2

请注意,第三个矩阵的列数与第一个矩阵的列数相同(例如
ncol(mat1)==ncol(mat3)
),但行数不同(例如
nrow(mat1)!=nrow(mat3)
)。

共享您的代码……您到目前为止都尝试了什么?嘿,阿克谢,我刚刚编辑了我的问题谢谢新手的帮助!但这不是我需要的,也许我没有解释清楚。我编辑我的问题。。。
# sites*traits matrix
mat3 <- as.data.frame (matrix (NA, nrow = n.sites, ncol = n.traits, dimnames = list (sites.names, traits.names)))

for (i in 1:n.sites){
  spec_per_site_boolean <- mat2[i, ] == 1
  mat1_subset <- mat1[spec_per_site_boolean, ]
  
  for (j in 1:n.traits){
    if (is.numeric (mat1_subset[,j]))
      mat3[i,j] <- mean (mat1_subset[,j])
    else 
        mat3[i,j] <- paste (sort (unique(mat1_subset[,j])), collapse = ".")
  }
}
mat3