任务
我正在尝试使用更好的功能(循环或矢量),根据字母表中的每个字母将较大的列表解析为26个(也许是27个)较小的列表(即,第一个列表包含该较大列表的所有开头的条目)带有字母A的第二个列表,带有字母B的第二个列表...可能的第27个列表包含使用其他数字之一的所有剩余条目。
然后,我尝试使用adist函数来标识列表中哪些名称相似(例如,我需要更正拼写错误的公司名称,例如,公司A需要更正为公司A)。
到目前为止的代码
#creates a vector for all uniqueID/stakeholders whose name starts with "a" or "A"
stakeA <- grep("^[aA].*", uniqueID, value=TRUE)
#creates a distance matrix for all stakeholders whose name starts with "a" or "A"
stakeAdist <- (adist(stakeA), ignore.case=TRUE)
write.table(stakeAdist, "test.csv", quote=TRUE, sep = ",", row.names=stakeA, col.names=stakeA)
说明 我可以使用上面的代码完成任务的第一步;我创建了一个以字母A开头的所有条目的列表,然后计算了每个条目之间的“距离”(显示在矩阵中)。
询问一个
我可以复制并粘贴此代码26次,然后在字母中移动,但我认为这样做可能是一种更优雅的方式,我想学习它!
询问两个
到目前为止,为了“更正”条目,我不得不编写表格并移至Excel。在Excel中,我必须插入一个行条目以使矩阵正确对齐(我想这是我代码中的一个小缺陷)。要更正条目,我使用条件格式来突出显示adist在1到10之间的所有实例,然后必须手动通过突出显示并更正列表。
任何有关使用R进一步使该方法/更好的策略自动化的功能/方法的帮助都将非常有用。
答案 0 :(得分:0)
举个例子可以帮助您,但是这可能有用。
编辑:我假设您的数据位于名为data.frame
的{{1}}中
df
使用for(i in 1:26) {
stake <- subset(df, uniqueID==grep(paste0('^[',letters[i],LETTERS[i],'].*'), df$uniqueID, value=T))
stakeDist <- adist(stakeA,ignore.case=T)
write.table(stakeDist, paste0("stake_",LETTERS[i],".csv"), quote=T, sep=',')
}
以及内置的paste0
和letters
的组合会创建您的LETTERS
表达式。
使用grep
,提取正确的ID
subset
还将为paste0
创建一个唯一的文件名。
它们都使用write.table()
循环