r - 如何修复“无效因子水平”?
问题描述
我无法运行平均功能。这是我的代码:
我已经成功地单独尝试了 factor(data$date) 函数。shell回答它由51个级别的890个条目组成。
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"])
我希望tata数据帧的第一列第一行用平均值填充,但实际上我收到此错误消息:
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("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)
推荐阅读
- javascript - 数组到元素 javascript
- ruby-on-rails - Rails如何在参数中封装2个var?
- java - 使用非静态内部类在 MainActivity 中接收广播
- python-3.x - 在 Linux 命令中使用命令“import os”失败?
- c# - 广义 DocumentDB / CosmosDB 分区策略
- javascript - jquery加载多行
- qt - Seg Fault 创建新的 QTcpSocket
- java - 无法解析符号“MODE_PRIVATE”
- java - 如何确定哪个 Xlint 选项对应于编译器警告?
- python - 为什么python的'不是'不一致?