【发布时间】:2018-03-18 08:16:36
【问题描述】:
我正在尝试集成 2 个功能。 第一个是检查变量是否是虚拟的,而 第二个适用于数据框并根据每列的值(虚拟或非虚拟)返回打印语句。 虚拟函数适用于单个变量(例如 df$var1),但是当我尝试在数据帧上使用第二个变量时,它显示所有变量都是虚拟的,而它们不是。 这里是代码
一些随机生成的数据
level=c("Strongly Agree", "Agree", "Neither agree or disagree","Disagree", "Strongly disagree",NA)
df <- data.frame(pre_1=as.character(sample(c("Yes","No", NA), 20, replace = T)),
pre_2=as.character(sample(level, 20, replace = T)),
post_1=as.character(sample(level, 20, replace = T)),
post_2=as.character(sample(level, 20, replace = T)),
stringsAsFactors=T)
这里是虚拟函数
dummy <- function(v, naVal = NULL) {
v1 <- na.omit(v)
# remove NA's
v2 <- as.integer(as.factor(v1))
if( !is.numeric(v2) ) stop("Only numeric vectors are accepted.")
# get unique values
v_unique <- unique(v2)
# remove 'naVal's
v_unique2 <- v_unique[! v_unique %in% naVal]
# count number of unique values and check whether all values are integers
if ( length(unique(v_unique2)) > 2L ||
any(as.integer(v_unique2) != v_unique2) ) FALSE else TRUE
}
这里是df的打印函数
data_dummy <- function(df) {
df = select(df, starts_with("pre_"))
for (i in 1:ncol(df)){
if (dummy(as.character(df[i]))==TRUE) {print ("dummy")}
else {print ("not dummy")}}
}
期望应该是 1 “dummy” 1 “not dummy”。 现实:
[1] "dummy"
[1] "dummy"
【问题讨论】:
标签: r