【发布时间】:2015-01-18 10:19:13
【问题描述】:
我有两个数据框,一个小,一个大。尺寸如下。基本上,我希望看到列中的值以及它的频率,并且我希望在较大的数据框中有一个更高的数字,而不是在较小的数据框中。
> length(smalldf$col1)
[1] 5377
> length(largedf$col1)
[1] 56016
现在,当我尝试查找每个值中唯一值的数量时,我得到以下信息。现在,这个结果并不像预期的那样,我确信与较小的数据帧相比,较大的数据帧中有更多的 new(unique) 值。
> length(unique(smalldf$col1))
[1] 4697
> length(unique(largedf$col1))
[1] 4698
如果我打印出唯一值,我会得到 largedf,其中所有 4697 个元素都是 smalldf 加上最后的 NA。
所以,我尝试打印较大数据框中的值,这些值不属于较小数据框的一部分,但我只是将所有列的 NA 作为它的值
> library('plyr')
> a1NotIna2 <- sqldf('SELECT * FROM largedf EXCEPT SELECT * FROM smalldf')
> a1NotIna2
只给我所有反对它的 NA 专栏
最后,我尝试在大数据框中找到每个值的频率。 我得到了相同的结果
【问题讨论】:
-
你能检查一下 NA 是不是字符吗?
sum(is.na(largedf$col1)) -
@akrun,对不起,我努力提供一个可重现的例子,但由于我正在从一个巨大的数据文件中读取,我无法做到。当我运行命令时,你让我这样做,我得到数字 50639。这是什么意思?
-
表示该列有 50639 个 NA 值。所以,本质上是
56016-50639#[1] 5377值 -
@akrun,我认为这与以下命令有关。创建大数据框是为了从总数据集(数据框)中查找第 19 列或第 20 列包含特定值 4820 的那些行。这是我使用的命令。这里有什么问题吗? largedf = totaldataset[which(totaldataset[,c(19:20)] == "4280"),].在较小的数据集上,它可以工作,因为我只在第 19 列中查找值 4820。并使用 smalldata = totaldataset[which(totaldataset[,19] == "4280 "),] 之类的东西。我哪里错了?
-
我想你可以试试
largedf <- totaldataset[totaldataset[,19]=='4280'|totaldataset[,20=='4280',]。如果列是数字,4280不需要引号