【问题标题】:R: two seemingly identical datasets but one works, one does not?R:两个看似相同的数据集,但一个有效,一个无效?
【发布时间】:2017-04-05 13:56:05
【问题描述】:

R 版本 3.3.2 (2016-10-31)。使用的包是 vegan、plyr 和 bbmle。

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

 Taxon          Sam1001    Sam1002
 Bacteria01     0.25       0
 Bacteria02     0.11       0.34

“好的”数据集是df1。它有 3013 个变量的 1885 个 obs。 df2 有 2377 个变量的 1674 个 obs。加载时还会出现警告:

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)。

【问题讨论】:

  • 你能解释一下代码的总体目标是什么以及结果(应该)代表什么吗?我很难弄清楚你到底在做什么。
  • 对不起,我试图保持简单,但我想它太简单了!我的总体目标是创建一个稀疏的 OTU seen here。我将在接下来的步骤中更新问题。
  • 顺便说一句,我没有遵循上面给出的链接中建议的代码 - 只是使用这些图表作为我最终将通过这种冗长的数据集操作实现的示例。
  • 如此有效地您尝试创建一个列表,说明每列有多少个非 NA 值?
  • 完全正确,同时保持列名(与df2 的列表不同)。

标签: r plyr vegan


【解决方案1】:

非常感谢 Marijin Stevering 的回答:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多