我正在尝试从矩阵中的两列中删除所有NA
值,并确保两列都没有另一列不具有的值。
代码:
data <- dget(file)
dependent <- data[,"chroma"]
independent <- data[,"mass..Pantheria."]
names(independent) <- names(dependent) <- rownames(data)
for (name in rownames(data)) {
if(is.na(dependent[name])) {
independent$name <- NULL
dependent$name <- NULL
}
if(is.na(independent[name])) {
independent$name <- NULL
dependent$name <- NULL
}
}
print(dput(independent))
print(dput(dependent))
我是R的新手,我正试图用for循环执行此任务。但是,当我通过分配NULL
删除部分时,我收到以下警告:
1: In independent$Aeretes_melanopterus <- NULL : Coercing LHS to a list
2: In dependent$name <- NULL : Coercing LHS to a list
不会删除任何元素,independent
和dependent
会保留所有原始行。
文件(输入):
structure(list(chroma = c(7.443501276, 10.96156313, 13.2987235,
17.58110922, 13.4991105), mass..Pantheria. = c(NA, 126.57, NA,
160.42, 250.57)), .Names = c("chroma", "mass..Pantheria."), class = "data.frame", row.names = c("Aeretes_melanopterus",
"Ammospermophilus_harrisii", "Ammospermophilus_insularis", "Ammospermophilus_nelsoni",
"Atlantoxerus_getulus"))
chroma mass..Pantheria.
Aeretes_melanopterus 7.443501 NA
Ammospermophilus_harrisii 10.961563 126.57
Ammospermophilus_insularis 13.298723 NA
Ammospermophilus_nelsoni 17.581109 160.42
Atlantoxerus_getulus 13.499111 250.57
期望的输出:
structure(list(chroma = c(10.96156313, 17.58110922, 13.4991105
), mass..Pantheria. = c(126.57, 160.42, 250.57)), .Names = c("chroma",
"mass..Pantheria."), class = "data.frame", row.names = c("Ammospermophilus_harrisii",
"Ammospermophilus_nelsoni", "Atlantoxerus_getulus"))
chroma mass..Pantheria.
Ammospermophilus_harrisii 10.96156 126.57
Ammospermophilus_nelsoni 17.58111 160.42
Atlantoxerus_getulus 13.49911 250.57
structure(c(126.57, 160.42, 250.57), .Names = c("Ammospermophilus_harrisii",
"Ammospermophilus_nelsoni", "Atlantoxerus_getulus"))
Ammospermophilus_harrisii Ammospermophilus_nelsoni Atlantoxerus_getulus
126.57 160.42 250.57
structure(c(10.96156313, 17.58110922, 13.4991105), .Names = c("Ammospermophilus_harrisii",
"Ammospermophilus_nelsoni", "Atlantoxerus_getulus"))
Ammospermophilus_harrisii Ammospermophilus_nelsoni Atlantoxerus_getulus
10.96156 17.58111 13.49911
答案 0 :(得分:2)
您希望忽略chroma
或mass..Pantheria
为NA
的数据中的行。这是一个快速的方法:
data = data[!is.na(data$chroma) & !is.na(data$mass..Pantheria.), ]
我不确定你为什么单独打破independent
和dependent
,但在过滤掉错误的观察结果后是一个很好的时机。< / p>
由于这些是您的唯一两列,这相当于省略数据框中具有任何NA
值的行,因此您可以使用这样的快捷方式:
data = na.omit(data)
如果你想保持一个原始的&#34;复制原始数据,只需更改结果的名称:
data_no_na = na.omit(data)
# or
data = data[!is.na(data$chroma) & !is.na(data$mass..Pantheria.), ]
关于代码的错误,$
用于从数据框中提取列,但您尝试将其用于命名向量(因为您&#39;已经提取了列),这是行不通的。即便如此,$
仅适用于文字字符串,您无法将其与变量一起使用。对于数据框,您需要使用括号来提取存储在变量中的列。例如,内置mtcars
数据有一个名为"mpg"
的列:
# these work:
mtcars$mpg
mtcars[, "mpg"]
my_col = "mpg"
mtcars[, my_col]
mtcars$my_col ## does not work, need to use brackets!
您永远不能在数据框中使用$
行名,只能使用列名。