我有一些像
这样的文件myfiles <- c("1850-12.dat", "1851-10.dat", "1851-11.dat", "1851-1.dat", "1851-6.dat",
"1851-7.dat", "1851-8.dat", "1852-10.dat", "1852-11.dat", "1852-12.dat",
"1852-1.dat", "1852-2.dat", "1852-3.dat", "1852-4.dat", "1852-7.dat",
"1852-8.dat", "1852-9.dat", "1853-10.dat", "1853-11.dat", "1853-12.dat")
其中第一个数字是年份,第二个数字是月份,我将它们放在带有
的列表中myfilesContent <- lapply(myfiles, read.table, quote="\"")
我用
重命名了每个元素的名称myfilesContent <- setNames(myfilesContent,myfiles)
>myfilesContent[1]
$`1850-12.dat`
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
.
.
.
我想要做的是根据年份和月份信息对列表元素重新排序。
我所做的是用一年中的天数重命名它们,因此每个列表元素的名称看起来像
> names(myfilesContent)
[1] "335" "639" "670" "366" "517" "547" "578" "1005" "1036"
[10] "1066" "731" "762" "791" "822" "913" "944" "975" "1370"
[19] "1401" "1431" "1097" "1128" "1156" "1187" "1217" "1248" "1309"
[28] "1340" "1735" "1766" "1796" "1462" "1493" "1521" "1552" "1582"
但后来我不知道如何对它们进行排序。
非常感谢
答案 0 :(得分:4)
dates <- do.call(rbind,
strsplit(gsub(".dat", "",
myfiles, fixed=TRUE),
"-"))
dates <- matrix(as.numeric(dates), ncol=2)
myfilesContent[order(dates[,1], dates[,2])]
答案 1 :(得分:1)
您可以使用order(names(myfilesContent))
找到排序所需的顺序,然后可以将其用于您想要的子集(我不清楚)。
这很有效,因为它可以对字符串进行排序。您可能遇到的唯一问题是字符串必须具有相同的长度(您需要追加0&#39; s。)
然后,您可以使用myfilesContent[order(names(myfilesContent)), ]
进行排序,因为myfilesContent是一个矩阵
对于附加的0,您可以使用以下内容:
a = names(myfilesContent)
b = mapply(paste0,sapply(nchar(a),function(x) rep("0", max(char(x)) - x + 1)), a)
事实上,这比我最初认为的那样复杂[!],你应该考虑罗兰的回答,因为它解决了你处理约会的事实。
[!]我认为paste0(rep("0", max(nchar(a) - nchar(a)), a)
会起作用。