r - 具有不同类的多个 value.var 的 dcast data.table
问题描述
我正在尝试将dcast
我的输入数据输入inDT
到预期的输出中outDT
:
library(data.table)
inDT <- data.table(
int_value = c(2020L, 1L:10L, rep(NA_integer_, 20)),
num_value = c(rep(NA_real_, 11), seq(0.1, 1, 0.1), rep(NA_real_, 10)),
timestamp_value = c(rep(as.POSIXct(NA), 21), Sys.time() - 1:10),
id = c(
"int_id_1",
rep("int_id_2", 10),
rep("num_id", 10),
rep("timestamp_id", 10)
)
)
outDT <- data.table(
int_id_1 = c(2020L, rep(NA_integer_, 9)),
int_id_2 = 1L:10L,
num_id = seq(0.1, 1, 0.1),
timestamp_id = Sys.time() - 1:10
)
我尝试了几个不同的星座使用dcast.data.table
:
dcast.data.table(inDT, int_value + num_value + timestamp_value ~ id, value.var = c("int_value", "num_value", "timestamp_value"))
dcast.data.table(inDT, . ~ id, value.var = c("int_value", "num_value", "timestamp_value"))
但似乎我在这里遗漏了一些东西。
任何帮助是极大的赞赏。
解决方案
一个不完美的方法:
inDT[, rn := rowid(id)]
Filter(function(z) !all(is.na(z)),
dcast(inDT, rn ~ id, value.var = list("int_value", "num_value", "timestamp_value")))
# rn int_value_int_id_1 int_value_int_id_2 num_value_num_id timestamp_value_timestamp_id
# <int> <int> <int> <num> <POSc>
# 1: 1 2020 1 0.1 2021-09-23 09:15:41
# 2: 2 NA 2 0.2 2021-09-23 09:15:40
# 3: 3 NA 3 0.3 2021-09-23 09:15:39
# 4: 4 NA 4 0.4 2021-09-23 09:15:38
# 5: 5 NA 5 0.5 2021-09-23 09:15:37
# 6: 6 NA 6 0.6 2021-09-23 09:15:36
# 7: 7 NA 7 0.7 2021-09-23 09:15:35
# 8: 8 NA 8 0.8 2021-09-23 09:15:34
# 9: 9 NA 9 0.9 2021-09-23 09:15:33
# 10: 10 NA 10 1.0 2021-09-23 09:15:32
注意:我必须rn
在每个 中添加一个表示行号的列id
,因为旋转操作需要将行关联在一起的前提。
推荐阅读
- java - 如何添加 - 登录 printf
- jquery - 像画布中的垂直弧线一样的文本
- java - 如何在 Spring Security 中通过电子邮件而不是用户名登录
- javascript - 如何在产品列表仍在 prestashop 中加载时显示加载图像
- mysql - 在所有列mysql上添加唯一约束的成本是多少
- python - 在数据框条目中搜索字符串并将其复制 python
- asp.net - 如何使用 LINQ 从 Datatable 中获取过滤后的数据集
- ms-access - 使用 Select Distinct 并编辑第二列中的输出
- c# - 类库自动添加到 Visual Studio 7.5.2 mac os X 中的其他项目
- html - google siganute 使一张图片有两个链接