根据R中列的值创建另一列

时间:2013-05-30 14:42:21

标签: r data.table

我有一个名为p的数据框,其内容如下:

structure(list(AGENT = c(45693, 45693, 45693, 45693, 45693, 45693, 
45693, 45693, 42627, 42627, 42627, 42627, 42627, 42627)), .Names = "AGENT", row.names = c(NA, 
-14L), class = "data.frame")

我想在这个名为p的数据框中再添加两列。例如,如果p $ AGENT == 45693,我喜欢将Location设置为dallas,将提供者设置为ATT。

我尝试过这样的事情:

library(data.table)
p<-p[,LOCATION:=if(AGENT==45693, c("Dallas"))]

我收到此错误:

Error: unexpected ',' in "p<-p[,LOCATION:=if(AGENT==45693,"

是data.table完成此任务的最佳方法吗?有什么想法吗?

2 个答案:

答案 0 :(得分:3)

你必须先创建一个data.table才能在其上使用data.table语法。

p<-data.table(p)
#create(update) column called LOCATION and set it to Dallas if AGENT==45693
p[AGENT==45693,LOCATION:="Dallas"]

括号中的第一个参数是过滤器,第二个参数称为J,您可以选择列,也可以指定列。

答案 1 :(得分:1)

@Dean的答案非常好。我只想提一下,您也可以使用:=赋值运算符来创建名称向量。这里有两个版本:

library(data.table)
p <- data.table(dat)
p[AGENT==45693,c('LOCATION','Provider') := list("Dallas",'ATT')]

DT <- data.table(dat)
DT[AGENT==45693, `:=`(LOCATION ="Dallas", Provider = "ATT")]