Error in[<-.data. frame (*tmp* ,missing cols, value = 0) missing values are not allowed in subscripted assignments of data frames
时间: 2024-04-11 09:27:21 浏览: 234
这个错误通常是因为在给数据帧分配新值时出现了缺失值。在 R 中,数据帧不允许在赋值操作中使用缺失值进行索引。
要解决这个问题,你可以使用条件语句(如 ifelse())或函数(如 replace())来处理缺失值,然后再进行赋值操作。下面是一个示例:
```R
# 创建一个包含缺失值的数据框
df <- data.frame(a = c(1, 2, NA), b = c(3, NA, 5))
# 使用 ifelse() 处理缺失值
df$a <- ifelse(is.na(df$a), 0, df$a)
# 使用 replace() 处理缺失值
df$b <- replace(df$b, is.na(df$b), 0)
# 输出结果
df
```
在这个示例中,我使用 ifelse() 函数和 replace() 函数来将缺失值替换为0,并将新值赋给数据框的相应列。你可以根据你的具体需求选择适合的处理方式。
希望这能帮到你!如果还有其他问题,请随时提问。
相关问题
> optdigits <- read.csv("/Users/jiawen/Desktop/optdigits_csv.csv") > optdigits_dist <- dist(optdigits[,1:1038]) Error in `[.data.frame`(optdigits, , 1:1038) : undefined columns selected > optdigits <- optdigits[complete.cases(optdigits),] > optdigits_dist <- dist(optdigits[,1:1038]) Error in `[.data.frame`(optdigits, , 1:1038) : undefined columns selected > optdigits_dist <- dist(optdigits[,1:3]) > mds <- cmdscale(optdigits_dist) > cols <- rainbow(10) > plot(mds,col=cols[optdigits$class+1])为什么mds图像里什么也没有
这个问题可能是因为在距离矩阵计算时,使用了过多的特征列。根据您的代码,您试图计算前1038列的距离矩阵,但是optdigits数据集只有64列。因此,您应该使用正确的列数来计算距离矩阵。例如,如果您只想使用前3列的特征来计算距离矩阵,则可以使用以下代码:
```
optdigits_dist <- dist(optdigits[,1:3])
```
如果您仍然无法得到正确的图像,您可以尝试绘制不同的维度。例如,您可以尝试绘制前两个维度:
```
plot(mds[,1], mds[,2], col=cols[optdigits$class+1])
```
希望这可以帮助您解决问题。
> data <- fread("/Users/imac/Desktop/summary_process/output_summary15.csv") > library(data.table) > setwd("/Users/imac/Desktop/summary_process") > data <- fread("output_summary15.csv") > cols <- c(4, 5, 25, 17, 26, 10) > selected_data <- data[, cols] Error in `[.data.table`(data, , cols) : j (the 2nd argument inside [...]) is a single symbol but column name 'cols' is not found. Perhaps you intended DT[, ..cols]. This difference to data.frame is deliberate and explained in FAQ 1.1.
这个错误是因为在`data[, cols]`中,`cols`被解释为一个列名,而不是列的索引。可以使用`..cols`来解决这个问题,因为`..`告诉`data.table`使用变量的值而不是变量名。
以下是修改后的代码:
```R
library(data.table)
# 设置工作目录
setwd("/Users/imac/Desktop/summary_process")
# 读取csv文件
data <- fread("output_summary15.csv")
# 选择需要的列
cols <- c(4, 5, 25, 17, 26, 10)
selected_data <- data[, ..cols]
# 将列粘在一起
text <- apply(selected_data, 1, function(x) {
paste(x[1], x[2], "blastx", x[3], x[4], "blastn", x[5], x[6], sep = "::")
})
# 使用gsub函数将空格替换为.
text <- gsub(" ", ".", text)
# 将文本转化为数据框
new_data <- data.frame(text)
# 写入新文件
write.csv(new_data, "new_file.csv", row.names = FALSE)
```
请注意,我只是修改了第5和第8行的代码,以便正确选择列。
阅读全文