小编Ben*_*don的帖子

R data.table错误无法重命名NA的列名

我有一个data.table,其中有一些列名称NA.试图将它们更改为角色名称失败,他们留下来NA.

我设法通过切换到data.frame来替换它们,但有没有办法data.table

dt <- data.table(a = 1:2, b = 2:3)
setDF(dt)
names(dt) <- c(NA,"c")
setDT(dt)
names(dt) <- c("a","b")
names(dt)
# [1] NA  "b"`
Run Code Online (Sandbox Code Playgroud)

使用data.frame它的工作原理:

setDF(dt)
names(dt) <- c("a", "b")
names(dt)
# [1] "a" "b"`
Run Code Online (Sandbox Code Playgroud)

编辑:@akrun建议使用NA_character_,但这不适用于名称中的几个NA(这是我的情况,但上面的例子已经简化)

dt <- data.table(a = 1:2, b = 2:3, c = 2:3)
setDF(dt)
names(dt) <- c(NA,NA,"c")
setDT(dt)    
setnames(dt, NA_character_, c('a','b'))
Run Code Online (Sandbox Code Playgroud)

错误setnames(dt, NA_character_, c("a", "b")):old列名中的某些项重复(不明确):NA

setnames(dt, c(NA_character_,NA_character_), c('a','b'))
Run Code Online (Sandbox Code Playgroud)

错误setnames(dt, c(NA_character_, NA_character_), c("a", "b")):有些重复old …

r data.table

11
推荐指数
1
解决办法
656
查看次数

data.table使用setDT修改父环境/奇怪的行为

因此,如果我使用现有向量和setDT的data.frame构建data.table,则在父环境中修改原始向量:

a <- 1:2 / 2
x <- 1:10 / 2
y <- 11/2
dt <- data.frame(a, x, y)
setDT(dt)
dt[ , cond := a == 1]
dt[(cond), c("x", "y") := list(y, x)]
x
#[1] 0.5 5.5 1.5 5.5 2.5 5.5 3.5 5.5 4.5 5.5
Run Code Online (Sandbox Code Playgroud)

对于Info,我使用R 3.5.1和data.table 1.11.4

如果我使用data.table构造函数而不是data.frame + setDT,它不会修改向量x.

a <- 1:2 / 2
x <- 1:10 / 2
y <- 11/2
dt <- data.table(a, x, y)
dt[ , cond := a == 1]
dt[(cond), c("x", "y") := …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

标签 统计

data.table ×2

r ×2