我有一个包含五个数据框的列表,其中包含用户对调查的响应。
在每个数据框中,第二列是用户ID号。一些用户多次参加调查,我试图清除重复的回复并保留第一条记录。
命名约定是相当标准的,因此第一个数据框中的列被称为类似于 survey1_id ,第二个是 survey2_id 等,但例外情况是第三个数据框中的列称为 survey3a_id 。
基本上我试图做的就是:
for (i in seq(1,5)) {
newdata <- distinct(survey_list[[i]], grep(names("^survey.*_id$", survey_list[[i]]), value = TRUE))
}
但这不起作用。
我原本以为这只是因为grep输出周围有引号,但我试图用noquote()
剥离它们并且这不起作用。然后我意识到distinct()
实际上没有评估第二个参数,它只是字面意思,所以我试图强制它使用eval()
进行评估,但这不起作用。 (不确定我真的期待它。)
所以现在我有点卡住了。我不知道最好的解决方案是编写五行单独的代码,还是为了更通用的解决方案,在循环中逐项进行排序和比较?只是希望有一个更清洁的解决方案。我对这些东西不熟悉。