【发布时间】:2021-08-18 21:34:37
【问题描述】:
我有一个包含数百列且缺少值的分类数据集。我正在尝试编写一个可以快速执行此操作的函数,但遇到了问题。这是我到目前为止所做的。非常感谢指针:
df <- data.frame(
id=c(10, 20, 30, 40, 50,60),
gender=c('male', 'female', 'female', 'male', 'female', ''),
mood=c('happy', 'sad', 'happy', 'sad','happy', ''),
outcome=c(1, 1, 0, 0, 0,1),
province = c('gp', 'np','ec','', 'wc', 'nw'))
我希望能够为每个变量执行此操作:
print("before")
df %>%
count(gender)
levels(df$gender) <- c(levels(df$gender), "Unknown")
df <- df %>%
mutate(gender = replace(gender, gender == "", "Unknown"))
print("after ")
df %>%
count(gender)
我在函数中实现这一点的尝试如下,我有一个函数一次接收一个变量:
valueFiller <- function(myVar){
print("before")
df %>%
count(myVar)
levels(df$myVar) <- c(levels(df$myVar), "Unknown")
df <- df %>%
mutate(myVar = replace(myVar, myVar == "", "Unknown"))
print("after ")
df %>%
count(myVar)
}
然后我打算以这种方式应用于许多列(但这是一次 1 〜我需要能够一次使用带有变量的列表):
df$mood <-mapply(valueFiller, df$mood)
df
我的功能不起作用。请帮助执行此操作。可能有更好的方法来做到这一点,并且很想听听。
谢谢!
【问题讨论】:
标签: r dataframe function replace mapply