在R中读取,重新编码,子集化和重新整形顺序标记的data.frames

时间:2014-01-30 17:34:27

标签: r data.table

我很难适应我之前用过的脚本并按顺序重新编码标记为data.tables。

我在R中有一系列data.tables,它们按顺序标记为:df1df2df3等。然后我会应用特定的(并且不一致的)规则在名为data.tablesstatus的{​​{1}} {。}}中创建新变量。

我想做的是:

  1. 读入数据表
  2. csat变量重新编码为新变量
  3. 子集data.table,因此它只包含4个变量(csatcsatcsat_did
  4. 使用外部联接将data.table与以前的表合并(因此可以将其重新整形为长格式)
  5. 我正在尝试在下面的脚本中解决第1-3点,并且不知道如何实现#4。

    已编辑

    status

    我不确定使用df_names<-c(df,df2,df3) # Create list of data.tables csat_vars<-c("CustomerId","csat","csat_d","status") # Create list of 4 variables out <- lapply(1:length(df_names), function(idx) { d <- df_names[idx] d$csat_d <- recode(d$csat,"1:5=0;6:7=1;NA=NA;") d <- subset(d, select=c(csat_vars)) }) data.table(这些是小型数据集)是否更好,所以欢迎任何帮助。

    这里的迷你数据集:

    data.frame

1 个答案:

答案 0 :(得分:0)

猜测我会说你想要这样做......

out <- lapply( ll , function(x) x[ , csat := recode( csat , ,"1:5=0;6:7=1;NA=NA;" ) ][ , csat_vars , with = FALSE ] )

作为一个玩具工作的例子,我展示了这个:

df1 <- data.table( a = 1 , b = 2 , c = 3 )
df2 <- data.table( a = 1 , b = 2 , c = 3 )
ll <- list(df1,df2) 
vars <- c( "a" , "c" )
#  Recode column 'c' to 10, and then subset data.table to only columns 'a' and 'c'
lapply( ll , function(x)  x[ , c := 10 ][ , vars , with = FALSE  ] )
#[[1]]
#   a  c
#1: 1 10

#[[2]]
#   a  c
#1: 1 10