我目前正在用data.table语法翻译一个应用程序,遇到了一个pivot_longer
,其中列名根据模式分为两列:
library(data.table)
library(tidyr)
dt <- data.table(id = 1:5, abc_123 = runif(5), def_456 = runif(5))
dt %>% pivot_longer(-id, names_pattern = "(.*)_(.*)", names_to = c("char", "num"))
# A tibble: 10 × 4
# id char num value
# <int> <chr> <chr> <dbl>
# 1 1 abc 123 0.902
# 2 1 def 456 0.763
# 3 2 abc 123 0.00490
# 4 2 def 456 0.471
# 5 3 abc 123 0.647
# 6 3 def 456 0.742
# 7 4 abc 123 0.730
# 8 4 def 456 0.0154
# 9 5 abc 123 0.207
#10 5 def 456 0.764
我尝试为measure.vars = patterns()
提供模式,但是,似乎在melt
中只有值可以分隔到不同的列中,而不是变量名。
有没有一种类似的方法可以用data.table
来实现?
2条答案
按热度按时间rkkpypqq1#
IIRC,(变量)名称的分离只能在data.table的开发版本中在melt中完成。
你可以通过运行
data.table::update_dev_pkg()
来安装一个dev版本。使用dev版本
如果你想把
num
转换成一个数值变量,那么你可以使用as.numeric
(同样的逻辑适用于char
,如果你想把它转换成一个因子)。新代码将成为使用发布版本
enyaitl32#
我不认为
melt
单独可以做到这一点,但你可以尝试tstrsplit
沿着它。我希望这应该接近
pivot_longer
所做的这给