无法获得dplyr filter_与数据集和COL_NAME作为变量
问题描述:
我撞我的头的最后几个小时,但仍然未能解决这方面的工作...无法获得dplyr filter_与数据集和COL_NAME作为变量
我想写A R函数,它接受一个数据帧名称和列名称作为变量,并尝试返回一个数据帧,其中包含指定列的所有不同值,减去任何NA或“N/A”值。
这是我的功能,
getDistinctColValues <- function(dataset, colname, removeNA = FALSE) {
colname <- as.name(colname)
retVector <- dataset %>% distinct_(colname)
# Not working!
if (removeNA == TRUE)
{
retVector <- filter_(retVector, colname != "N/A" | !is.null(colname))
}
return(retVector)
}
下面是一个示例输出(参见N/A):
> getDistinctColValues(dataTY, "SomeColumn", TRUE)
SomeColumn
1 BR
2 ET
3 SG
4 BV
5 N/A
6 MN
7 SP
这个滤波器不工作。 na.omit不会工作,因为有“N/A”字符串。我不清楚选择退出NSE。我正在使用lazyeval软件包,但没有深入理解它。
任何帮助将不胜感激。
溶液(如通过@aosmith引导):
getDistinctColValues <- function(dataset, colname, removeNA = FALSE) {
colname <- as.name(colname)
retVector <- dataset %>% distinct_(colname)
if (removeNA == TRUE)
{
filter_criteria <- interp(~v!="N/A", v=as.name(colname))
print(filter_criteria)
retVector <- retVector %>% filter_(filter_criteria)
}
return(retVector)
}
答
使用read.csv(your_data, na.strings = c("N/A"))
或readr::read_csv(your_data, na = c("N/A"))
在数据读出时,应指示 “N/A” 是一个实际的NA
值您也可以使用gsub(pattern = "N/A", replacement = NA, your_data)
然后您可以使用filter(your_data, is.na(SomeColumn)==F)
例如:
# Dummy data
your_data <- data_frame(var1 = c('A','B','C','D'),
SomeColumn = c('ET','AB','N/A', 'TC'))
# Replace 'N/A' with NA
your_data$SomeColumn <- gsub(pattern = 'N/A',replacement = NA, your_data$SomeColumn)
# Filter out NAs in selected column
your_data %>%
select(SomeColumn) %>%
filter(is.na(SomeColumn) == F)
# A tibble: 3 × 1
SomeColumn
<chr>
1 ET
2 AB
3 TC
如果由于某种原因,你需要向保持价值"N/A"
,你可以改变你的过滤器命令filter(SomeColumn != "N/A")
,我相信你将需要'lazyeval ::插补'。看到答案[这里](http://stackoverflow.com/questions/26492280/non-standard-evaluation-nse-in-dplyrs-filter-pulling-data-from-mysql) – aosmith