我将一个txt读入R作为数据帧,数字作为整数读入。部分数据集:
otu <- structure(list(Otu00002 = c(167L, 808L, 0L, 103L, 245L, 99L, 146L, 395L, 479L, 185L), Otu00003 = c(367L, 563L, 562L, 806L, 726L, 693L, 753L, 1089L, 358L, 938L), Otu00004 = c(281L, 1338L, 634L, 471L, 146L, 46L, 138L, 171L, 400L, 378L), Otu00005 = c(191L, 262L, 234L, 148L, 184L, 278L, 117L, 141L, 118L, 61L), Otu00006 = c(87L, 104L, 99L, 85L, 31L, 57L, 6L, 12L, 80L, 78L), Otu00007 = c(11L, 99L, 32L, 49L, 51L, 54L, 259L, 179L, 65L, 21L), Otu00008 = c(304L, 90L, 36L, 376L, 416L, 210L, 173L, 67L, 108L, 406L), Otu00009 = c(26L, 61L, 531L, 53L, 58L, 438L, 57L, 688L, 546L, 5L), Otu00010 = c(0L, 1L, 182L, 2L, 0L, 0L, 153L, 79L, 350L, 0L)), .Names = c("Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", "Otu00008", "Otu00009", "Otu00010"), row.names = c("E04", "E05", "E06", "E07", "E08", "E09", "E10", "E11", "E12", "F01"), class = "data.frame")
然后我想创建一个包含2个变量的数据框 - “otu”和列总和的列标题。如果我通过cbind创建此数据帧,则列sums(test $ size.sub)将被视为因子。
test <-as.data.frame(cbind(OTU = colnames(otu), size.sub = (colSums(otu))))
即使我指定as.numeric
test <- as.data.frame(cbind(OTU=colnames(otu), size.sub= as.numeric(colSums(otu))))
但是,如果我首先使用colSums创建一个数据帧,然后重命名该变量并创建row.names的第二个变量,则temp $ size.sub是数字。
temp <- as.data.frame(colSums(otu))
colnames (temp) <- c("size.sub")
temp$OTU <- row.names(sub.size)
有人可以帮我理解为什么会这样吗?
ETA-我在此问题之前并不知道cbind是罪魁祸首。将这个问题标记为dup是因为我没有使用正确的术语进行搜索,这首先打败了提问的目的 - 如果我知道搜索cbind和因素,我会知道答案。我提供了可重复的例子,可以帮助将来的人。