【发布时间】:2016-03-27 01:32:56
【问题描述】:
我有一个巨大的 Excel 电子表格,其中包含 %m/%d/%Y 格式的日期。在 R 中,我使用as.Date 将它们转换为日期格式。问题是 Excel 中的某些日期手动输入不正确,例如在下面的部分中输入 214 而不是 2014。
...
235 2014-01-20
236 2014-03-03
237 2014-01-24
238 2014-03-07
239 214-05-23
240 2014-01-31
241 2014-02-19
242 2014-03-27
...
对于单个列,我可以使用函数which(dataframe$colname_X<1900),它会给出行号。这很容易,因为我已经知道它是哪一列了。
我的问题是,我怎样才能对整个数据框执行相同的操作,以便同时获得故障单元格的行号和列号?。
【问题讨论】:
-
您是否有多个包含日期的列?如果是这样,您可以使用
apply在所有列上运行 which 函数。例如apply(df, 2, function(x) which(x<1900))这将返回与每列对应的结果列表,其中包含错误的索引。 -
@jalapic 谢谢,这就是我要找的。唯一的不便之处是,当日期输入正确时,它会返回每列的名称,并输出
integer(0),或者如果输入不正确(我上面的例子),例如[1] 239。它工作得很好,但如果有大量的列,我可以看到这个输出变得很麻烦。 -
它应该保留列顺序。因此,您可以像
mycolnames <- colnames(df)这样保存原始列名称,然后当您拥有正确的数据时,只需像这样将它们放回去colnames(df) <-mycolnames -
@jalapic 这不是问题,问题是如果我有 50 个带有日期的列,它会返回所有这些列,而不是选择具有错误条目的列:
$date.1 integer(0) $date.2 integer(0) $date.3 integer(0) $date.4 integer(0) $date.5 integer(0) $date.6 integer(0) $date.7 integer(0) $date.8 integer(0) $date.9 [1] 3。所以理想情况下,我希望它跳过前 8 列,然后将我拉到列date.9。你为什么不输入你的解决方案作为一个单独的答案 -
已经这样做了——如果有帮助,请告诉我。没有可重复的数据,很难做一个确切的例子。
标签: r