使用循环删除重复项

时间:2017-11-23 19:58:47

标签: r

我想用函数在df中制作某列的字符串(列表)。
它有很多重复,所以我使用这个自定义函数:

remove_duplicates = function(df) {
    paste(unique(df[,1]), collapse = ' ')
}

首先让我们创建一个例子:

#dfs with set.seed to make sure we all on the same page
set.seed(123)
df1=data.frame("colour"=(c(rep("RED",10),rep("BLUE",10),rep("GREEN",10)))
                   ,"shade"=c(rep(c(rep("LIGHT",5),rep("DARK",5)),3))
                   ,"value"=runif(30,min=0,max=1))

df2=data.frame("colour"=(c(rep("RED",10),rep("BLUE",10),rep("GREEN",10)))
                   ,"shade"=c(rep(c(rep("LIGHT",5),rep("DARK",5)),3))
                   ,"value"=runif(30,min=0,max=1))

df=data.frame("colour"=(c(rep("RED",10),rep("BLUE",10),rep("GREEN",10)))
                   ,"shade"=c(rep(c(rep("LIGHT",5),rep("DARK",5)),3))
                   ,"value"=runif(30,min=0,max=1))

#necessary list
list.df.names=c("df1","df2","df3")

现在单个df发生了什么:

df1[,1]
#output
 [1] RED   RED   RED   RED   RED   RED   RED   RED   RED   RED   BLUE  BLUE  BLUE  BLUE  BLUE  BLUE  BLUE 
[18] BLUE  BLUE  BLUE  GREEN GREEN GREEN GREEN GREEN GREEN GREEN GREEN GREEN GREEN

我想要的结果是(这里是一个df):

remove_duplicates(df1)
#output
[1] "RED BLUE GREEN"

当我尝试循环此函数时出现问题:

for (i in 1:length(list.df.names)) {
  remove_duplicates(list.df.names[i])
  }

我一直收到这个错误:

 Error in df[, 1] : incorrect number of dimensions

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

以下作品

for (i in 1:length(list.df.names)) {
  a <- remove_duplicates(eval(parse(text=list.df.names[i])))
  print(a)
}

#[1] "RED BLUE GREEN"
#[1] "RED BLUE GREEN"
#[1] "RED BLUE GREEN

在上面,parse(text)text中的字符串转换为表达式。然后eval对此进行求值 - 因此,您将获得以文本命名的对象的值。