R的新作和此处的一般编程。我有几个物种(列)和图(行)的存在/不存在数据的二元矩阵。我试图在几个相异指数中使用它们,这要求它们都具有相同的尺寸。尽管总共存在10个图,但是根据在该特定时间观察到的物种,存在可变数量的列。我尝试添加“失踪”'每个矩阵的列,以便我可以执行分析如下:
df1 <- read.csv('file1.csv', header=TRUE)
df2 <- read.csv('file2.csv', header=TRUE)
newCol <- unique(append(colnames(df1),colnames(df2)))
diff1 <- setdiff(newCol,colnames(df1))
diff2 <- setdiff(newCol,colnames(df2))
for (i in 1:length(diff1)) {
df1[paste(diff1[i])]
}
for (i in 1:length(diff2)) {
df2[paste(diff2[i])]
}
不会抛出任何错误,但df1和df2都保持不变。我怀疑我的问题是我使用了粘贴,但我无法找到任何其他方法来像这样在数据框中添加列。添加后,新列的矩阵也应该为0,但我认为这是默认值,所以我没有添加任何内容来指定它。
谢谢大家。
答案 0 :(得分:2)
使用您的代码,您可以通过以下方式生成没有for
循环的列:
df1[, diff1] <- 0 #I guess you want `0` to fill those columns
df2[, diff2] <- 0
identical(sort(colnames(df1)), sort(colnames(df2)))
#[1] TRUE
或者,如果您想将数据集合并为一个,则可以使用rbind_list
中的data.table
fill=TRUE
library(data.table)
rbindlist(list(df1, df2), fill=TRUE)
set.seed(22)
df1 <- as.data.frame(matrix(sample(0:1, 10*6, replace=TRUE), ncol=6,
dimnames=list(NULL, sample(paste0("Species", 1:10), 6, replace=FALSE))))
set.seed(35)
df2 <- as.data.frame(matrix(sample(0:1, 10*8, replace=TRUE), ncol=8,
dimnames=list(NULL, sample(paste0("Species", 1:10),8 , replace=FALSE))))