我有两个数据库,一个数据库包含2283行产品信息(USDA),第二个数据库是621种风味类型的产品(Flavor)。我想使用grepl代码在第一个数据集的每一行中识别风味。但是,我不想为每种口味逐一编写代码。因此,我决定编写一个循环。但是,我的循环没有为每个风味检查显示多列结果。相反,它显示的是最后一场比赛的结果。您能帮我解决这个问题吗?
for(i in 2:length(Flavor $ Flavor_names){
result <- cbind(USDA, Flavor=grepl(paste0(Flavor_names$FLAVOR.SCENT[i], collapse="|") , USDA$long_name)))
答案 0 :(得分:0)
在开始这样的循环之前,您需要创建一个空对象来填充循环的所有结果。如result <- NULL
。其次,在运行循环时,请像输入result[i]
一样索引输出对象。您的循环如下所示:
result <- NULL
for (i in 2:length(Flavor$Flavor_names){
result[i] <- cbind(USDA, Flavor=grepl(paste0(Flavor_names$FLAVOR.SCENT[i], collapse="|") , USDA$long_name)))
}
现在results
的长度为i,在2
至length(Flavor$Flavor_names)
的位置上,您得到了i-th
循环的结果。请注意,索引1
将是NA
,因为您是从2
开始循环的。如果循环中包含result[i - 1]
,则可以避免这种情况。