函数根据 R 中另一列的数据从一列检索数据

function to retrieve data from one column based on data from another column in R

我有一个农贸市场数据集,其中一列是 "MarketName"(第 2 列),另一列是 "WIC"(第 21 列)。如果 WIC 列 = Y,我编写了一个函数来检索市场名称。我的输出应该是 2,207 个名称的列表,但是我得到 8,144 行的输出,因为对于 WIC 列 = N 的行,我的输出显示 NA .有 45 列和 8,144 行,但这是一个只有两列的假数据集

MarketName <- c("Union Springs Famers Market","Union Square Farmers Market", "Union Square Greenmarket", "Union Street Farmers Market", "Unity Market Day Farmers", "University Farmers Market") 
WIC <- c("Y","N","N","N","Y","Y")
data3 <- data.frame(MarketName, WIC)
data3$MarketName <- as.character(data3$MarketName)
data3$WIC <- as.character(data3$WIC)

这是我的功能(这可能是问题所在?)

marketacceptWIC <- function(mydf)
{
    market <- 0
    for(i in 1:length(data3$WIC))
    {
        if(data3[i,2] == "Y")
            market[i] <- data3[i,1]
    }
    return(market)
} 

这是我得到的输出示例

[1] "Union Springs Famers Market" NA                            NA                            NA                           
[5] "Unity Market Day Farmers"    "University Farmers Market"                                                                                    

我要的只是接受WIC的农贸市场列表

[1] "Union Springs Farmers' Market"                                                       
[2] "Unity Market Day Farmers"                                                         
[3] "University Farmers Market"                                                            

我认为这里不需要 for 循环。尝试在 WIC 列上进行子集化。如果您只需要 MarketName 列,则

data3[data3$WIC == "Y", ]$MarketName

[1] "Union Springs Famers Market" "Unity Market Day Farmers"    "University Farmers Market"