我正在使用R中的 vector 和矩阵。
在矩阵中,我想返回所有具有特定列(例如第9列)最小值的行。该列的值也可以是"Not Available"
。我怎样才能做到这一点?
为了检查不可用的值,我尝试了data <- data[data[,9] != "Not Available"]
,但是没有给我我想要的结果。
例如 -
Code Name Number
1 India 2.3
2 America 3.5
3 China Not Available
4 Europe 1.2
5 Japan 1.2
我想获取所有具有
Number
列的最小值的行。所需的输出是 Code Name Number
4 Europe 1.2
5 Japan 1.2
不可用值必须被忽略
最佳答案
通过在列中使用“非数字”元素,当我们使用read.csv/read.table
读取数据时,该列将被转换为“字符”或“因子”类。如果我们使用stringsAsFactors=FALSE
,则列类将为“字符”,否则默认为“因数”。
假设您使用stringsAsFactors=FALSE
读取了数据集,那么我们可以通过as.numeric
将列更改为“数字”,非数字元素将被强制转换为NA
。
df1$Number <- as.numeric(df1$Number)
如果列是'factor'类,则可能需要
as.numeric(as.character(df1$Number))
。然后,我们通过“Number”列的“min”值对数据集进行subset
。 subset(df1, Number==min(Number, na.rm=TRUE))
# Code Name Number
#4 4 Europe 1.2
#5 5 Japan 1.2
也可以在不更改“数字”类别的情况下完成此操作(即,将其保留为“字符”列,但不建议这样做)
subset(df1, Number== min( as.numeric(Number[Number!='Not Available'])))
# Code Name Number
#4 4 Europe 1.2
#5 5 Japan 1.2
最好的选择是通过在
na.strings
中指定“不可用”来读取数据集,它将转换为NA
。 df1 <- read.table('yourfile.txt', header=TRUE, na.strings='Not Available')
数据
df1 <- structure(list(Code = 1:5, Name = c("India", "America", "China",
"Europe", "Japan"), Number = c("2.3", "3.5", "Not Available",
"1.2", "1.2")), .Names = c("Code", "Name", "Number"),
class = "data.frame", row.names = c(NA, -5L))
关于r - 包含R中列的最小值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31052462/