2017-02-03 73 views
1

我有一个data.table“结果”,这是从arules包怡亨()在R的输出中的所有列评估上.SDcols函数,返回data.table

 lhs   rhs   sup  conf  lift  itemset 
1: {XXXXXXXXXXX} {XXXXXXXXOOO} 0.001635323 1.0000000 611.50000  1 
2: {XXXXXXXXOOO} {XXXXXXXXXXX} 0.001635323 1.0000000 611.50000  1 
3: {XXXXX00XXXX} {XXXXXX0XXXX} 0.001635323 1.0000000 32.18421  2 
4: {XXXXXXX00XX} {XXX0XXXXXXX} 0.001635323 0.5000000 203.83333  3 
5: {XXX0XXXXXXX} {XXXXXXX00XX} 0.001635323 0.6666667 203.83333  3 

我想替换“结果”的lhs和rhs列中的“{”和“}”。我能够运行GSUB并返回一个data.table与LHS和RHS值仅使用下面的语句:

result[,lapply(.SD,gsub,pattern = "{",replacement = "",fixed = T),.SDcols=c("lhs","rhs")][,lapply(.SD,gsub,pattern="}",replacement="",fixed=T)] 

输出我得到:

  lhs   rhs  
1: XXXXXXXXXXX XXXXXXXXOOO 
2: XXXXXXXXOOO XXXXXXXXXXX 
3: XXXXX00XXXX XXXXXX0XXXX 
4: XXXXXXX00XX XXX0XXXXXXX 
5: XXX0XXXXXXX XXXXXXX00XX 

但我也想保留sup,conf,lift和itemset的值。

预期输出:

 lhs   rhs   sup  conf  lift   itemset 
1: XXXXXXXXXXX XXXXXXXXOOO 0.001635323 1.0000000 611.50000  1 
2: XXXXXXXXOOO XXXXXXXXXXX 0.001635323 1.0000000 611.50000  1 
3: XXXXX00XXXX XXXXXX0XXXX 0.001635323 1.0000000 32.18421  2 
4: XXXXXXX00XX XXX0XXXXXXX 0.001635323 0.5000000 203.83333  3 
5: XXX0XXXXXXX XXXXXXX00XX 0.001635323 0.6666667 203.83333  3 

如何获得其余的列有他们的名字?

回答

1

我们可以做的分配到位,以取代我们从lapply

result[,c("lhs", "rhs") := lapply(.SD,gsub,pattern = "[{}]", 
     replacement = ""), .SDcols=c("lhs","rhs")] 
result 
#   lhs   rhs   sup  conf  lift itemset 
#1: XXXXXXXXXXX XXXXXXXXOOO 0.001635323 1.0000000 611.50000  1 
#2: XXXXXXXXOOO XXXXXXXXXXX 0.001635323 1.0000000 611.50000  1 
#3: XXXXX00XXXX XXXXXX0XXXX 0.001635323 1.0000000 32.18421  2 
#4: XXXXXXX00XX XXX0XXXXXXX 0.001635323 0.5000000 203.83333  3 
#5: XXX0XXXXXXX XXXXXXX00XX 0.001635323 0.6666667 203.83333  3 
+1

得到了输出,我尝试过这种方式。结果[(C(lapply(.SD,GSUB, (cs)= {{“,replacement =”“,fixed = T),sup,conf,lift,itemset)),SDcols = c(”lhs“,”rhs“)] [,。(c(lapply(.SD ,gsub,pattern =“}”,replacement =“”,fixed = T),sup,conf,lift,itemset)),. SDcols = c(“lhs”,“rhs”)]因为它返回一个列表,我们得到data.table与列。任何想法为什么这不起作用? – TUSHAr

+0

@Tushar如果没有赋值或“set”,则原始数据集中的列中的值不会更新 – akrun

1
library('data.table') 
for(col in c("lhs", "rhs")){ 
    set(result, , col, gsub("[{}]", '', result[[col]])) # using set() function is faster than `[`. see ?`:=` 
} 

result 
#   lhs   rhs   sup  conf  lift itemset 
# 1: XXXXXXXXXXX XXXXXXXXOOO 0.001635323 1.0000000 611.50000  1 
# 2: XXXXXXXXOOO XXXXXXXXXXX 0.001635323 1.0000000 611.50000  1 
# 3: XXXXX00XXXX XXXXXX0XXXX 0.001635323 1.0000000 32.18421  2 
# 4: XXXXXXX00XX XXX0XXXXXXX 0.001635323 0.5000000 203.83333  3 
# 5: XXX0XXXXXXX XXXXXXX00XX 0.001635323 0.6666667 203.83333  3