我有一个带有几个数值变量和因子的数据框。我希望遍历数字变量并将负值替换为丢失。我做不到。
我的替代想法是编写一个获取数据框和变量的函数,然后执行该函数。也不行。
我的代码是:
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
我在做什么错了?
谢谢。
答案 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