在r中的矩阵中处理​​数据

时间:2015-03-17 20:22:40

标签: r matrix

我是r的新手,因而是问题。我有一个包含以下数据的矩阵

[1,] NA                  "/home/psycodelic/Desktop/r_source//AAIT.csv" 
 [2,] "50.6606864064485"  "/home/psycodelic/Desktop/r_source//AAPL.csv" 
 [3,] "20.697618553608"   "/home/psycodelic/Desktop/r_source//BSFT.csv" 
 [4,] "0.585775171228343" "/home/psycodelic/Desktop/r_source//BSPM.csv" 
 [5,] "1.07713703069294"  "/home/psycodelic/Desktop/r_source//BSQR.csv" 
 [6,] NA                  "/home/psycodelic/Desktop/r_source//CAPN.csv" 
 [7,] NA                  "/home/psycodelic/Desktop/r_source//CAPNW.csv"

我正在尝试使用此矩阵

执行以下操作

〜提取文件名,即与.csv

相邻的部分

〜删除所有包含NA的条目

〜将值转换为整数

〜按照降序排列的值排序(顶部最低)

〜创建一个只包含前10个(即至少10个)值的新矩阵并打印出来。

有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

注意:您现在的问题不适合此网站。您应该包含minimum reproducible example。包括您尝试过的代码以及它给您带来麻烦的地方。 此时,您可能会继续拒绝投票,并且您的问题可能会被关闭。请注意这一点。请访问help center以改善您的问题。

那就是,你是R的新手,我会尽力帮助你开始这个。但是请咨询帮助中心以开始Stack Overflow。


假设您的矩阵以名称mat存储。首先将其转换为数据框。

df <- as.data.frame(mat)

这将包含名为V1V2的列。如果要使用colnames(df) <- c("whatever", "something"),可以重命名它们。我假设你保留了原来的名字,我会继续。

现在从第二列获取文件名。

df$file.name <- with(df, tail(strsplit(V2, "/")[[1]], n=1))

这里有很多事情要发生,所以让我们一步一步地看一下。

> strsplit("/home/psycodelic/Desktop/r_source//AAPL.csv", "/")
[[1]]
[1] ""  "home"  "psycodelic"  "Desktop"  "r_source"  ""  "AAPL.csv"

这是一个带有一个元素的列表。我们可以使用[[1]]获取该单个元素。该元素包含一个字符串向量,这是通过将输入分割为/字符而产生的。

您只需要文件名,这是文件路径的最后一部分。因此,我们可以使用tail(..., n=1)获取向量的最后一个元素。

with(df, ...)确保V2在数据框df的上下文中得到解释。

所以此时df有三列:两个原件,另外一个包含文件名。下一步是删除NA值。我们可以使用na.omit()函数执行此操作。

df <- na.omit(df)

您可以使用V1盲目地将as.integer()中的花车转换为整数。

df$V1 <- as.numeric(df$V1)

越来越近了!按升序排序:

df <- df[with(df, order(V1)), ]

现在创建一个新数据框并打印出来。

(df2 <- head(df, n=10))

括号中的作业将打印并分配。