将函数应用于R中的字符帧
我有一组变量,这些变量是我试图通过创建以下函数并使用将函数应用于R中的字符帧,r,frame,apply,R,Frame,Apply,我有一组变量,这些变量是我试图通过创建以下函数并使用apply()函数将其转换为二进制的字符: a <- as.factor(c("n/a", "False", "False", "True")) b <- as.factor(c("n/a", "True", "False", "True")) y <- data.frame(a,b) conv <- function(x){ levels(x)[which(levels(x)=="n/a")] <-
apply()
函数将其转换为二进制的字符:
a <- as.factor(c("n/a", "False", "False", "True"))
b <- as.factor(c("n/a", "True", "False", "True"))
y <- data.frame(a,b)
conv <- function(x){
levels(x)[which(levels(x)=="n/a")] <- NA
levels(x)[which(levels(x)=="False")] <- 0
levels(x)[which(levels(x)=="True")] <- 1
x <- as.numeric(levels(x))[x]
return(x)
}
apply(y,2, conv)
预期产出应为:
y:
NA NA
0 1
0 0
1 1
你有没有想过为什么会这样?谢谢。在
R
中,逻辑值为真/假,而不是字符串“真”、“假”。此外,NA
是缺少的值
y[] <- NA^(is.na(replace(as.matrix(y), y=="n/a", NA)))*+(y=='True')
y
# a b
#1 NA NA
#2 0 1
#3 0 0
#4 1 1
y[]在R
中,逻辑值为真/假,而不是字符串“真”、“假”。此外,NA
是缺少的值
y[] <- NA^(is.na(replace(as.matrix(y), y=="n/a", NA)))*+(y=='True')
y
# a b
#1 NA NA
#2 0 1
#3 0 0
#4 1 1
y[]您的函数很好,只需使用lappy
conv <- function(x){
levels(x)[which(levels(x)=="n/a")] <- NA
levels(x)[which(levels(x)=="False")] <- 0
levels(x)[which(levels(x)=="True")] <- 1
x <- as.numeric(levels(x))[x]
return(x)
}
lapply(y,conv)
conv您的功能很好,只需使用lappy
conv <- function(x){
levels(x)[which(levels(x)=="n/a")] <- NA
levels(x)[which(levels(x)=="False")] <- 0
levels(x)[which(levels(x)=="True")] <- 1
x <- as.numeric(levels(x))[x]
return(x)
}
lapply(y,conv)
conv一个简单的ifelse
可以满足NA
需求<然后可以使用code>grepl
转换为0/1,即
y[] <- lapply(y[], function(i) ifelse(i == 'n/a', NA, grepl('True', i)*1))
y
# a b
#1 NA NA
#2 0 1
#3 0 0
#4 1 1
y[]一个简单的ifelse
可以满足NA
需求<然后可以使用code>grepl
转换为0/1,即
y[] <- lapply(y[], function(i) ifelse(i == 'n/a', NA, grepl('True', i)*1))
y
# a b
#1 NA NA
#2 0 1
#3 0 0
#4 1 1
y[]你能显示你的预期输出吗?@akrun我刚把它添加到帖子中。你的功能很好,用lappy
代替apply
。你能显示你的预期输出吗?@akrun我刚把它添加到帖子中。你的功能很好,使用lappy
而不是apply
。如何将n/a保留为NA
?使用此代码,它们被转换为0@coding_heart如果您查看第一行,它是NA。@coding\u heart如果您想更新原始数据集,请指定它,即<代码>y[]您如何将n/a保留为NA
?使用此代码,它们被转换为0@coding_heart如果您查看第一行,它是NA。@coding\u heart如果您想更新原始数据集,请指定它,即<代码>y[]