我想用函数在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
我在这里做错了什么?
答案 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
对此进行求值 - 因此,您将获得以文本命名的对象的值。