R:不同的函数报告同一个数据帧的不同大小

塞尔吉奥·埃斯卡兰特

我有一个通过读取具有以下属性的 csv 文件创建的数据框:

'data.frame':   1290 obs. of  9 variables:
 $ Date            : Factor w/ 1290 levels "1/3/2020 00:00",..: 97 98 99 100 101 102 103 104 105 106 ...
 $ Moisture.20.0   : num  39.8 40 40.1 40.1 40.2 ...
 $ Moisture.46.0   : num  40.9 40.9 40.9 40.9 40.9 ...
 $ Temperature.20.0: num  32.6 32.7 33 33.4 33.7 ...
 $ Temperature.46.0: num  32.3 31.9 31.9 31.8 31.8 ...
 $ EC.20.0         : num  0.302 0.303 0.305 0.309 0.313 ...
 $ EC.46.0         : num  0.511 0.507 0.507 0.507 0.507 ...
 $ Field.ID        : int  6466 6466 6466 6466 6466 6466 6466 6466 6466 6466 ...
 $ Sensor.loc      : Factor w/ 1 level "-00.0000000 00.0000000": 1 1 1 1 1 1 1 1 1 1 

你可以看到它有 9 个变量的 1290 行。

但是,当我继续确定数据集中是否有任何 NA 值时,我得到TRUE.

any(is.na(df))

[1] TRUE

我知道这个特定的 csv 没有 NA 的事实。此外,我使用该which()函数来确定我可以在数据框中的哪个位置找到 NA 但得到奇怪的结果:

which(is.na(df))

[1] 1799 6959

如果我理解正确,调用将返回两个索引值,我将在其中找到 NA:[1799, ] 和 [6959, ]。

我不明白的是,如果我的原始数据集根据str()函数调用只有 1290,为什么我会得到这些值

which()函数是否识别不同的维度str()我怎么能相信which(is.na(df))为我提供正确的索引来检查和处理 NA?

r2evans

问题是 1799 不是第 1799,而是列排列的第 1799 个元素

dat <- mtcars[1:4,]
dat[3,3] <- NA
dat
#                 mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710     22.8   4   NA  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
which(is.na(dat))
# [1] 11

这 11 个包括:第 1 列中的 4 个、第 2 列中的 4 个以及第 3 列中的第 3 个元素。如果您想进行数学运算,则

isna <- which(is.na(dat))
(isna - 1) %% nrow(dat) + 1
# [1] 3               # row of the NA
(isna - 1) %/% nrow(dat) + 1
# [1] 3               # column of the NA

ind2arr <- function(ind, nr) cbind((ind-1) %% nr + 1, (ind-1) %/% nr + 1)
ind2arr(which(is.na(dat)), nrow(dat))
#      [,1] [,2]
# [1,]    3    3

### demo
ind <- seq_len(prod(dim(dat)))
cbind(ind, ind2arr(ind, nrow(dat)))
#       ind     
#  [1,]   1 1  1
#  [2,]   2 2  1
#  [3,]   3 3  1
#  [4,]   4 4  1
#  [5,]   5 1  2
#  [6,]   6 2  2
#  [7,]   7 3  2
#  [8,]   8 4  2
# ...truncated...
# [41,]  41 1 11
# [42,]  42 2 11
# [43,]  43 3 11
# [44,]  44 4 11

或者更好的是,添加arr.ind=TRUE以获得更好的视角。

which(is.na(dat), arr.ind = TRUE)
#            row col
# Datsun 710   3   3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

打印同一个数组,在不同的函数中是不同的,为什么呢?

不同的key_len导致同一个数据库(不同的环境)

在同一个数据帧的款项复式

Lisp:同一个数学函数在不同时间计算出不同的值?

减去两个大小不同的数据帧,但至少保持第一个数据帧的大小

R:根据条件(不同大小的数据帧),从另一个数据帧的列中为列分配值

想要连接到同一个数据库表但具有不同的值

在R中合并到单个数据帧和一个数据帧列表上的不同结果

同一个函数中的同一个类不同的id,以避免额外的代码

同一个函数总是为同一个输入返回不同的答案

将两个不同列表的数据帧融为r中的一个数据帧列表

从一个数据帧中的多个.csv和cbind提取同一列(不同长度)

创建一个数据帧,其中一个数组的长度不同

如果数据帧长度不同,如何用R中另一个数据帧的值填充列?

导入来自同一个Excel几张成熊猫一个数据帧

将同一个镜头与多个数据构造函数一起使用

将来自不同数据库的数据整理到同一个输出窗口

如何从同一个表中获取2个不同的数据列

在 R 中创建一个函数/宏,它可以遍历不同的数据帧

如何在python中多次将自定义函数应用于同一个数据帧?

在同一个反应函数中创建多个数据框,并分别输出

Rust中有条件编译的同一个函数的不同版本

用不同的参数多次调用同一个函数?

指定针对同一个名称的不同函数的类内使用声明

如何使用不同的 id 多次调用同一个函数

如何为同一个函数点击事件设置不同的延迟

Azure 数据工厂 - 如何创建多个数据集并对同一个 blob 容器中的文件应用不同的处理方式?

用另一个不同大小的 Pandas 数据帧减去 Pandas 数据帧

我需要帮助将两个不同的行(具有相同的列)添加到同一个数据表