变量名称作为R函数中的输入

时间:2018-12-13 09:43:31

标签: r function dataframe

我有一个带有几个数值变量和因子的数据框。我希望遍历数字变量并将负值替换为丢失。我做不到。

我的替代想法是编写一个获取数据框和变量的函数,然后执行该函数。也不行。

我的代码是:

NegativeToMissing = function(df,var)
{
  df$var[df$var < 0] = NA
}

Error in $<-.data.frame(`*tmp*`, "var", value = logical(0)) : replacement has 0 rows, data has 40 

我在做什么错了?

谢谢。

3 个答案:

答案 0 :(得分:1)

这里是一些虚拟数据的例子。

df1 <- data.frame(col1 = c(-1, 1, 2, 0, -3),
                  col2 = 1:5,
                  col3 = LETTERS[1:5])
df1
#  col1 col2 col3
#1   -1    1    A
#2    1    2    B
#3    2    3    C
#4    0    4    D
#5   -3    5    E

现在查找数字列

numeric_cols <- sapply(df1, is.numeric)

并替换负值

df1[numeric_cols] <- lapply(df1[numeric_cols], function(x) replace(x, x < 0 , NA))
df1
#  col1 col2 col3
#1   NA    1    A
#2    1    2    B
#3    2    3    C
#4    0    4    D
#5   NA    5    E

您也可以这样做

df1[df1 < 0] <- NA

答案 1 :(得分:0)

有了<Content contentContainerStyle={{ flex: 1 ,padding:15}}> {this.state.section.map(article => <WebView source={{ html: article.data.description}} javaScriptEnabled={true} style={{backgroundColor: 'transparent'}} /> )} </Content> ,我们就可以利用tidyverse

mutate_if

答案 2 :(得分:0)

如果您仍然只想更改一个选定的变量,则dplyr的解决方案是使用non-standard evaluation

library(dplyr)
NegativeToMissing <- function(df, var) {
  quo_var = quo_name(var)
  df %>% 
    mutate(!!quo_var := ifelse(!!var < 0, NA, !!var))

}

NegativeToMissing(data, var=quo(val1)) # use quo() function without ""
#   val1 val2
# 1    1    1
# 2   NA    2
# 3    2    3

使用的数据:

data <- data.frame(val1 = c(1, -1, 2),
                   val2 = 1:3)
data
#   val1 val2
# 1    1    1
# 2   -1    2
# 3    2    3