如果我有数据帧df:
df <- data.frame(var_1 = c("abcd","abc","ab"), var_2 = c("abcd","abc","ab"))
df$var_1 <- as.character(df$var_1)
df$var_2 <- as.character(df$var_2)
假设我想要删除var_1中3行以下的行,我通常会这样做:
df$var_1 <- ifelse(nchar(df$var_1) < 3,NA,df$var_1)
现在说我想把它变成一个函数,所以我可以把它应用到任何列。我创建了一个以列名作为输入的函数:
Func <- function(input_col) {
df[input_col] <- ifelse(nchar(df[input_col]) <3,NA,df[input_col])
df
}
然而,当我跑步时,这不会产生任何结果:
df <- Func(input_col = "var_1")
如何创建此功能?我最好在这里使用其中一个应用函数吗?
答案 0 :(得分:4)
你需要逗号:
Func <- function(input_col) {
df[,input_col] <-
ifelse(nchar(df[,input_col]) <3,
NA,df[,input_col])
#return df
df
}
答案 1 :(得分:2)
假设您的所有列都是character
列,您可以执行此操作:
df[sapply(df, nchar) < 3] <- NA
如果不能假设所有列都是character
列,那么这应该可行:
d <- sapply(df, is.character)
short <- sapply(df[d], nchar) < 3
df[d][short] <- NA
答案 2 :(得分:0)
我会使用apply:
apply(df, c(1, 2), function(x){ifelse(nchar(x)<3, NA, x)})
亲切的问候
答案 3 :(得分:0)
您也可以使用:
library(plyr)
is.na(df) <- colwise(nchar)(df) < 3