r - R:尝试使用另一个 data.table 对列进行操作时,data.table 中的奇怪行为
问题描述
我正在尝试使用不同的 data.table 对 data.table 列进行操作,并将结果分配给第一个 data.table 中的新列。但我一直有这个问题:
Warning messages:
1: In from:(from + len) :
numerical expression has 10 elements: only the first used
这是数据:
tstamps = c(1504306173, NA, NA, NA, NA, 1504393006, NA, NA, 1504459211, NA)
set.seed(0.1)
dt1 = data.table(utc_tstamp = sample(rep(tstamps, 100), 100))
dt2 = data.table(from = sample((1:90), 10), len = sample(1:10, 10))
> dt2
from len
1: 55 6
2: 59 9
3: 32 10
4: 24 3
5: 86 7
6: 54 1
7: 18 5
8: 11 8
9: 40 4
10: 75 2
我正在尝试计算NA
' 的数量dt1[from:(from+len), ]
并将结果分配给一个新列 count, in dt2
。
我目前拥有的是这个
dt2[, count := dt1[from:(from+len), ][is.na(utc_tstamp), .N]]
但这只是使用dt2[1,]$from
and dt2[1,]$len
,所有计数都只是NA
's in的数量dt1[dt2[1,]$from:(dt2[1,]$from + dt2[1,]$len), ]
,我收到以下警告
Warning messages:
1: In from:(from + len) :
numerical expression has 10 elements: only the first used
2: In from:(from + len) :
numerical expression has 10 elements: only the first used
结果是这样的:
> dt2
from len count
1: 55 6 5
2: 59 9 5
3: 32 10 5
4: 24 3 5
5: 86 7 5
6: 54 1 5
7: 18 5 5
8: 11 8 5
9: 40 4 5
10: 75 2 5
虽然应该是这样的:
> dt2
from len count
1: 55 6 5
2: 59 9 5
3: 32 10 8
4: 24 3 3
5: 86 7 5
6: 54 1 2
7: 18 5 4
8: 11 8 5
9: 40 4 4
10: 75 2 2
如果有人解释为什么会发生这种情况以及我怎样才能得到我想要的东西,我将不胜感激。
解决方案
根据描述,我们得到'from'和'from'之间加上'len'的序列,根据这个位置索引从'dt1'中获取'utc_stamp'列的对应元素,将其转换为逻辑(is.na(
),并得到sum
TRUE 元素的总和或元素的数量NA
。分配(:=
)它以在“df2”中创建一个新列“count”
dt2[, count := unlist(Map(function(x, y)
sum(is.na(dt1$utc_tstamp[x:y])), from , from + len))]
dt2
# from len count
# 1: 55 6 5
# 2: 59 9 5
# 3: 32 10 8
# 4: 24 3 3
# 5: 86 7 5
# 6: 54 1 2
# 7: 18 5 4
# 8: 11 8 5
# 9: 40 4 4
#10: 75 2 2
或者另一种选择是按行序列分组,然后:
根据'from','len'列执行序列(),以从'dt1'中获取列值的子集并获取sum
逻辑vector
dt2[, count := sum(is.na(dt1$utc_tstamp[from:(from + len)])), by = 1:nrow(dt2)]
推荐阅读
- reactjs - AWS Amplify - 如何在登录后呈现组件
- typescript - 在 Typescript 文件中导入 Firebase Analytics
- html - CSS Grid carousel - 最后一项正在缩小
- javascript - 是否有在我的 Android 上运行 JavaScript 项目的命令?
- python - solve_ivp 缺少 1 个必需的位置参数错误
- r - 如何在R中仅对匹配的键值求和
- xamarin.forms - android上的xamarin.forms Collectionview中没有可见的选择
- c++ - 是什么导致“指定给 RtlValidateHeap(01480000, 014A2900) C-SDL-Blackjack.exe 的地址无效已触发断点。” 在这个项目中?
- c# - 当数据从 C# 到达时,Angular 中的 getDay() 未定义
- java - 如何在可见的两个视图之间切换?