R:两个看似相同的数据集,但有一个有效,有一个没有?

时间:2017-04-05 13:56:06

标签: r plyr vegan

R版本3.3.2(2016-10-31)。使用的包是素食主义者,plyr和bbmle。

我有两个非常大的数据集。我们称他们为df1df2。每个看起来像这样:

 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
  • 我尝试了strtailhead以及所有其他技巧组合,以确定是否存在恶意因素或角色。 出现是数据集中完整相同的整数和数字数,以及一个因子(Taxon)。

1 个答案:

答案 0 :(得分:0)

非常感谢Marijin Stevering的回答:

lapply(df, function(x) sum(!is.na(x)))

这也巧妙地削减了几个步骤。