我不明白为什么会收到此警告信息。
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> fixed[1, ] <- c("lunch", 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "lunch") :
invalid factor level, NA generated
> fixed
Type Amount
1 <NA> 100
2 0
3 0
答案 0 :(得分:186)
警告信息是因为您的&#34;类型&#34;变量是一个因素和午餐&#34;不是一个确定的水平。在使数据框强制使用时,请使用stringsAsFactors = FALSE
标记&#34;键入&#34;成为一个角色。
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> str(fixed)
'data.frame': 3 obs. of 2 variables:
$ Type : Factor w/ 1 level "": NA 1 1
$ Amount: chr "100" "0" "0"
>
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3),stringsAsFactors=FALSE)
> fixed[1, ] <- c("lunch", 100)
> str(fixed)
'data.frame': 3 obs. of 2 variables:
$ Type : chr "lunch" "" ""
$ Amount: chr "100" "0" "0"
答案 1 :(得分:39)
如果您直接从CSV文件阅读,请执行此操作。
myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)
答案 2 :(得分:19)
这是一种灵活的方法,它可以在所有情况下使用,特别是:
bootsd = function(data, boots, seed = 1234){
if (!missing(seed)) set.seed(seed)
ci.pct <- foreach(j = 1:nrow(data)) %do% {
datast1 <- c(rep(1, data[j, "num"]),
rep(0, data[j, "denom"]))
pct <- foreach(i = 1:boots, .combine = 'c') %dopar% {
index <- sample(1:length(datast1), size = length(datast1), replace = T)
sampledata <- datast1[index]
mean(sampledata)
}
cbind(quantile(pct, prob=c(0.025))*100000,
quantile(pct, prob=c(0.975))*100000)
}
ci.pcts <- do.call("rbind", ci.pct)
return(ci.pcts)
}
bootsd(data = maindata, boots = 5, seed = 1234)
已通过应用之前的操作获得(例如未立即打开文件,或创建新数据框)。首先,使用dataframe
函数取消分解字符串,然后使用as.character
重新分解(或简单地) as.factor
)功能:
factor
答案 3 :(得分:6)
解决此问题的最简单方法是为列添加新因子。使用级别功能确定您拥有的因子数量,然后添加新因子。
> levels(data$Fireplace.Qu)
[1] "Ex" "Fa" "Gd" "Po" "TA"
> levels(data$Fireplace.Qu) = c("Ex", "Fa", "Gd", "Po", "TA", "None")
[1] "Ex" "Fa" "Gd" "Po" " TA" "None"
答案 4 :(得分:0)
我也遇到了类似的问题,该问题是从.xlsx文件检索的数据。不幸的是,我在这里找不到正确的答案。我使用dplyr自行处理了以下问题,这可能会对其他人有所帮助:
#install.packages("xlsx")
library(xlsx)
extracted_df <- read.xlsx("test.xlsx", sheetName='Sheet1', stringsAsFactors=FALSE)
# Replace all NAs in a data frame with "G" character
extracted_df[is.na(extracted_df)] <- "G"
但是,我无法使用readxl
package来处理它,该参数没有与stringsAsFactors
相似的参数。因此,我已移至xlsx
程序包。