R版本3.3.2(2016-10-31)。使用的包是素食主义者,plyr和bbmle。
我有两个非常大的数据集。我们称他们为df1
和df2
。每个看起来像这样:
Taxon Sam1001 Sam1002
Bacteria01 0.25 0
Bacteria02 0.11 0.34
“好”数据集是df1
。它有1885个隐含的3013个变量。 df2
有1674个隐含2377个变量。加载后,它还会出现警告:
See spec(...) for full column specifications.
Warning: 55 parsing failures.
row col expected actual
1062 SAMN032937893 no trailing characters .12E-07
1062 SAMN032936513 no trailing characters .12E-07
1062 SAMN032936373 no trailing characters .12E-07
1062 SAMN032936273 no trailing characters .12E-07
1062 SAMN032937943 no trailing characters .12E-07
.... ............. ...................... .......
See problems(...) for more details.
我删除了第1062行,因为这似乎是一个问题。然后我运行以下代码:
df[df==0] <- NA
df2[df2==NA_integer_] <- NA #because NA_integer appears in the dataset df2
dfFreq <- apply(df, 2, count)
dfNARemoved <- lapply(dfFreq, function(x) transform(x[-nrow(x),]))
dfFreqxRemoved <- lapply(dfNARemoved, function(x) { x["x"] <- NULL; x
}) #removing useless x column
dfSum <- lapply(dfFreqxRemoved, function(x) sum(x))
df1
生成如下列表:
List of 3013
$ X1 : int 1884
$ SAMN03073712 : int 191
$ SAMN03852278 : int 1
$ SAMN02142445 : int 100
$ SAMN03852340 : int 1
$ SAMEA2241190 : int 108
等。但是,df2
会生成如下列表:
List of 38669
$ : num 1
$ : num 1
$ : num 1
$ : num 1
编辑:我的总体目标是从有蹄库存样本中获取操作分类单位(OTU)的大型数据集,并总结每个样本的OTU出现次数。对于df1
,这将生成如下矩阵:
Sam1001 Sam1002
2 1
使用此代码:
require(dplyr)
dfBound <- rbind(dfSum)
dfBoundData <- as.data.frame(dfBound)
dfBoundData$X1 <- NULL
transdfBoundData <- transform(dfBoundData, dfSum =
as.numeric(dfSum)) #although this works, it duplicates all of the rows
subttbd <- transdfBoundData[c(1, 2),]
subttbd <- subttbd[1,]
mat.subttbd <- data.matrix(subttbd)
然后我将创建图表。这适用于df1
,但不能成功用于df2
。
由于问题似乎出现在列表的创建中,我的问题是,如何让df2
创建像df1
这样的列表?具体来说,导致df2
得出如此不同的数据框中发生的事情(当我试图进一步操纵它时最终无用)会产生什么结果?
有用(?)信息
df2
。str
,tail
,head
以及所有其他技巧组合,以确定是否存在恶意因素或角色。 出现是数据集中完整相同的整数和数字数,以及一个因子(Taxon)。答案 0 :(得分:0)
非常感谢Marijin Stevering的回答:
lapply(df, function(x) sum(!is.na(x)))
这也巧妙地削减了几个步骤。