相关疑难解决方法(0)

在使用模式融化后,将"变量"列的数字表示转换为原始字符串

我使用patterns()参数data.table::melt()来融合具有几个容易定义的模式的列的数据.它正在工作,但我没有看到我如何创建一个字符索引变量而不是默认的数字细分.

例如,在A中,dog和cat列已编号...请查看"变量"列:

A = data.table(idcol = c(1:5),
            dog_1 = c(1:5),   cat_1 = c(101:105),
            dog_2 = c(6:10),  cat_2 = c(106:110),
            dog_3 = c(11:15), cat_3 = c(111:115))   
head(melt(A, measure = patterns("^dog", "^cat"), value.name = c("dog", "cat")))

   idcol variable dog cat
1:     1        1   1 101
2:     2        1   2 102
3:     3        1   3 103
4:     4        1   4 104
5:     5        1   5 105
6:     1        2   6 106
Run Code Online (Sandbox Code Playgroud)

但是,在B中,dog和cat列用文本编号,但"变量"列仍然是数字.

B = data.table(idcol = c(1:5),
                dog_one = …
Run Code Online (Sandbox Code Playgroud)

r melt data.table

9
推荐指数
1
解决办法
329
查看次数

使用 dtplyr 时,pivot_longer 给出错误

我有一个大型数据集,正在尝试使用 dtplyr 进行整理。它由不同位置的大量 (>1000) 日期值对组成。原始版本使用了pivot_longer,它在dplyr中工作正常,但在dtplyr中给出错误。有没有办法解决这个问题,保持 dtplyr 的性能优势?

这有效

library(tidyverse)
library(dtplyr)
library(data.table)

my_data_tb <- tribble(
  ~`date-A`, ~`value-A`, ~`date-B`, ~`value-B`,
  "date1", 1, "date2", 2,
  "date2", 1, "date3", 2 
)

my_data_tb %>% 
  pivot_longer(
  cols = everything(),
  names_to = c(".value", "grid_square"),
  names_sep = "-"
)
Run Code Online (Sandbox Code Playgroud)

但这给出了错误:

my_data_dt <- as.data.table(my_data_tb)
my_data_dt <- lazy_dt(my_data_dt)

my_data_dt %>%
  pivot_longer(
    cols = everything(),
    names_to = c(".value", "grid_square"),
    names_sep = "-"
  )
Run Code Online (Sandbox Code Playgroud)

错误信息是:

错误:无法对不存在的元素进行子集化。
x 位置 1 和 2 不存在。
i 只有 0 个元素。
运行rlang::last_error()看看哪里出错了。
另外:警告消息:
预计 2 …

r dplyr data.table dtplyr

5
推荐指数
1
解决办法
1221
查看次数

标签 统计

data.table ×2

r ×2

dplyr ×1

dtplyr ×1

melt ×1