更改列表中的变量名称并将原始变量名称保留在R

时间:2015-08-19 10:53:11

标签: r paste lapply

我有var1, .., var100的数据框数据。它们都是数字的,长度相同。

我将它们列入一个列表:list1<-list(var1, .., var100)

现在,我想要使用扩展名(var1_trunc,.., var100_trunc)复制变量,并保留原始变量(var1,.., var100)。我不需要rename,因为我希望稍后针对var1var1_trunc运行不同的统计信息,依此类推。

我试过了:

lapply(list1, function(x){
    paste(substitute(x),"trunc",sep="_")[x<mean(x)]<<-x
    paste(substitute(x),"trunc",sep="_")[x>=mean(x)]<<-mean(x)
    }

我的问题是没有创建新变量(var1,.., var100)

我可能正在尝试一种错误的方法吗?

1 个答案:

答案 0 :(得分:2)

我不明白为什么当你拥有一个易于在以后执行统计比较的数据框时将它们放入列表中。

正如@akrun所提到的,您可以使用该命令来更改名称。

 # example dataframe
df1 = data.frame(var1 = 1:5,
                 var2 = 11:15)
df1

#   var1 var2
# 1    1   11
# 2    2   12
# 3    3   13
# 4    4   14
# 5    5   15


# your function
ff = function(x){ ifelse(x < mean(x), x, mean(x)) }

# create new dataset by applying function to prevous dataset
df2 = data.frame(sapply(df1, ff))

df2

#   var1 var2
# 1    1   11
# 2    2   12
# 3    3   13
# 4    3   13
# 5    3   13

# change names and combine datasets
names(df2) = paste0(names(df1),"_trunc")
df_full = cbind(df1,df2)

df_full

#   var1 var2 var1_trunc var2_trunc
# 1    1   11          1         11
# 2    2   12          2         12
# 3    3   13          3         13
# 4    4   14          3         13
# 5    5   15          3         13

使用上述方法作为更新数据集的函数:

# your function to update dataset
UpdateDataset = function(df1){

ff = function(x){ ifelse(x < mean(x), x, mean(x)) }  # your function to update columns

df2 = data.frame(sapply(df1, ff))

names(df2) = paste0(names(df1),"_trunc")

df_full = cbind(df1,df2)

return(df_full)
                              }


# try a new dataset
df = data.frame(var1 = 1:10,
                var2 = 41:50)
df

#    var1 var2
# 1     1   41
# 2     2   42
# 3     3   43
# 4     4   44
# 5     5   45
# 6     6   46
# 7     7   47
# 8     8   48
# 9     9   49
# 10   10   50


UpdateDataset(df)

#    var1 var2 var1_trunc var2_trunc
# 1     1   41        1.0       41.0
# 2     2   42        2.0       42.0
# 3     3   43        3.0       43.0
# 4     4   44        4.0       44.0
# 5     5   45        5.0       45.0
# 6     6   46        5.5       45.5
# 7     7   47        5.5       45.5
# 8     8   48        5.5       45.5
# 9     9   49        5.5       45.5
# 10   10   50        5.5       45.5