[英]R data.table update a column of type list for a set of rows
假設我們有以下data.table:
> a <- data.table(id=(1:3), val=vector("list",length(3)))
> a$val <- list(c("a","b"),c("c","d","e"),c("f","e"))
> a
id val
1: 1 a,b
2: 2 c,d,e
3: 3 f,e
我們現在想要在'id'為2和3的行中從'val'列中刪除元素“e”。我能夠通過以下方式實現此目的:
> for (x in c(2,3)) {
a[id==x, val := list(list(val[[1]][ val[[1]] != 'e']))]
}
> a
id val
1: 1 a,b
2: 2 c,d
3: 3 f
怎么能用這樣的東西來完成
a[id %in% c(2,3), ..] ?
function_remove<-function(x,y){
if (y %in% c(2,3)){
x<-x[[1]]
list(x[x!="e"])
} else{
x
}
}
a[,list(function_remove(val,id)),by=1:nrow(a)]
nrow V1
1: 1 a,b
2: 2 c,d
3: 3 f
或者你可以這樣做:
function_remove_1<-function(x){
x[x!="e"]
}
a[id %in% c(2,3),]$val<-lapply(a[id %in% c(2,3),val],function_remove_1)
最后(如下所述)我們也可以通過參考更新:
a[id %in% c(1,2), val := lapply(val, function(x) x[x!="e"])]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.