我想我应该编辑这个例子,因为它有误导性。很抱歉给您带来不便:(
以下是我面临的警告示例:
dsf <- data.table(v1=c('a','a','b','b','b','c'),v2=c(3,5,8))
> dsf
v1 v2
1: a 3
2: a 5
3: b 8
4: b 3
5: b 5
6: c 8
我想添加一个新列来生成
v1 v2 v3
1: a 3 5
2: a 5 7
3: NA NA 4
4: b 8 6
5: b 3 9
6: b 5 4
7: NA NA 4
8: c 8 7
9: NA NA 9
但我收到一条警告信息:
在
[.data.table
中(dsf ,,:=
(v3,c(1:4))): 提供4个项目分配给'v3'栏中的3个项目(1个未使用)
,数据表为:
v1 v2 v3
1: a 3 5
2: a 5 7
3: b 8 6
4: b 3 9
5: b 5 4
6: c 8 7
在最初的情况下 - 我正在研究 - 我有这样的事情:
dsf <- dsf[, v3:=f(list(v2)) , by=list(v1)]
函数f创建一个额外的值。
答案 0 :(得分:3)
看起来conda install -c conda-forge keras
包中的cbind.fill
函数可能很有用:
rowr
或者,您可以尝试将两者合并在一起。类似的东西:
data.table(rowr::cbind.fill(dsf, data.table(v3 = c(1:4)), fill = NA))
# v1 v2 v3
#1: a 3 1
#2: a 5 2
#3: b 8 3
#4: NA NA 4
答案 1 :(得分:0)
使用此功能
myfun <- function(df, vec) {
L <- c(as.list(df), v3 = list(vec))
result <- lapply(L, `length<-`, max(lengths(L)))
do.call(cbind.data.frame, result)
}
myfun(dsf, 1:4)
# v1 v2 v3
# 1 a 3 1
# 2 a 5 2
# 3 b 8 3
# 4 <NA> NA 4
答案 2 :(得分:0)
也许,我的回答并不好看,但这对我来说已经足够了...... 感谢Stack Overflow :)
dsf <- data.table(v1=c('a','a','b','b','b','c'),v2=c(3,5,8))
dsf2 <- unique(as.data.frame(dsf[,1]))
dsf2$v2 <- NA
dsf <- rbind(dsf,dsf2)
dsf <- arrange(dsf,v1)
dsf <- dsf[, v3:=c(1:length(v2)), by=list(v1)]
>dsf
v1 v2 v3
1: a 3 1
2: a 5 2
3: a NA 3
4: b 8 1
5: b 3 2
6: b 5 3
7: b NA 4
8: c 8 1
9: c NA 2