我是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个)值的新矩阵并打印出来。
有人可以帮助我。
答案 0 :(得分:0)
注意:您现在的问题不适合此网站。您应该包含minimum reproducible example。包括您尝试过的代码以及它给您带来麻烦的地方。 此时,您可能会继续拒绝投票,并且您的问题可能会被关闭。请注意这一点。请访问help center以改善您的问题。
那就是,你是R的新手,我会尽力帮助你开始这个。但是请请咨询帮助中心以开始Stack Overflow。
假设您的矩阵以名称mat
存储。首先将其转换为数据框。
df <- as.data.frame(mat)
这将包含名为V1
和V2
的列。如果要使用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))
括号中的作业将打印并分配。