[英]How to fix 'invalid factor level'?
我不能运行一个卑鄙的功能。 这是我的代码:
我已经成功地尝试了因子(数据$ date)功能。 shell回答它由890个51级别的条目组成。
data <- read.table("R/DATA.csv", sep = ";", header = TRUE, dec = ",")
View(data)
colnames(data)[1] <- "Date"
eau <- data$"Tension"
eaucalculee <- ( 0.000616 * eau - 0.1671) * 100
data["Eau"] <- eaucalculee
tata <- data.frame("Aucun","Augmentation","Interception")
tata[1,1]<-mean(data$Eau[data$Date == levels(factor(data$Date))[1]&
data$Traitement == "Aucun"])
dataframe to be filled with the mean but in fact I get this error message : 我希望数据帧的第一列第一行用均值填充,但事实上我收到此错误消息:
In `[<-.factor`(`*tmp*`, iseq, value = 8.6692) :
invalid factor level, NA generated
请问你能帮帮我吗 ?
您可以在那里找到csv文件: https : //drive.google.com/file/d/1zbA25vajouQ4MiUF72hbeV8qP9wlMqB9/view? usp =sharing
非常感谢你
tata是一个因子data.frame,你想在try中插入一个数字
tata <- data.frame("Aucun","Augmentation","Interception" ,stringsAsFactors = F)
我不确定行tata <- data.frame("Aucun","Augmentation","Interception")
是否符合您的预期。 如果使用View(tata)
检查其结果,您将看到一个数据框,其中包含一条记录和3列,其值为 3个字符串(转换为因子,如@ s-brunel所说)。 列名是从它们的值( X.Aucun.
等)推断出来的。 我想你更想要创建一个数据框,其列名是给定的字符串。
建议的代码,带注释
data <- read.table("R/DATA.csv", sep = ";", header = TRUE, dec = ",")
# The following is useless since first column is already named Date
# colnames(data)[1] <- "Date"
# No need to create your intermediate variables eau and eaucalculee: you can
# do it directly with the data frame columns
data$Eau <- ( 0.000616 * data$Tension - 0.1671) * 100
# No need to create your tata data frame before filling its actual content, you
# can do it directly
tata <- data.frame(
Aucun = mean(data$Eau[
data$Date == levels(factor(data$Date))[1] & data$Traitement == "Aucun"
])
)
tata$Augmentation = your_formula_here
tata$Interception = your_formula_here
注1 :引用数据框列的最简单方法是使用$
,您不需要使用任何双引号。 您也可以使用[[
使用双引号(等效),但要注意[
将返回带有单列的数据框:
class(data$Date)
# [1] "factor"
class(data[["Date"]])
# [1] "factor"
class(data["Date"])
# [1] "data.frame"
class(data[ , "Date"])
# [1] "factor"
注意2 :尝试对您提出的问题进行逆向工程,也许您想为每个Date和Traitement组合计算Eau的平均值。 在这种情况下,我建议你dplyr
和tidyr
从令人敬畏的tidyverse
包:
# install.packages("tidyverse") # if you don't already have it
library(tidyverse)
data <- data %>%
mutate(Eau = ( 0.000616 * data$Tension - 0.1671) * 100)
tata_vertical <- data %>%
group_by(Date, Traitement) %>%
summarise(mean_eau = mean(eau))
View(tata_vertical)
tata <- tata_vertical %>% spread(Traitement, mean_eau)
View(tata)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.