我有很多文件,我需要自动为每个文件提供一个唯一的ID代码。
到目前为止,我已成功完成以下任务:
datalist <- mapply(cbind, datalist, "temp1"=names(datalist), SIMPLIFY=F)
将文件名放入新列。
但是我想添加一个数字,从1:每个文件中的行数。
我尝试了几件事,但我真的没想到要么工作: (然后我将它们粘贴在一起并删除&#39; temp&#39;列 - 然后找出如何在没有临时列的情况下一步完成它):
datalist <- mapply(cbind, datalist, "temp2"=1:(sapply(datalist, nrow)), SIMPLIFY=F)
或
datalist <- mapply(cbind, datalist, "temp2"=1:nrow(datalist), SIMPLIFY=F)
我可以获得列表中单个位的行数(nrow(datalist[[1]])
),但不确定如何将其应用于所有这些行,无论列表中有多少行。
它是for循环,还是有更好的方法?
示例数据集:
datalist <- structure(list(test.raw.data = structure(list(officer.sw = c("bob",
NA, "brian", "brian", NA), officer.ne = c(NA, "angie", NA, NA,
NA), officer.nw = c(NA, NA, NA, NA, "lola")), .Names = c("officer.sw",
"officer.ne", "officer.nw"), class = "data.frame", row.names = c(NA,
-5L)), test2.raw.data = structure(list(officer.sw = c("bob",
"NA", "brian", "brian", "NA", "bob", "NA", "bob", "bob", "NA",
"NA"), officer.ne = c("NA", "angie", "NA", "NA", "NA", "NA",
"sandy", "NA", "NA", "NA", "NA"), officer.nw = c("NA", "NA",
"NA", "NA", "lola", "NA", "NA", "NA", "NA", "lola", "NA"), officer.EM = c("NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "mr bendy"
), randomothercol = c("angie", "b", "c", "e", "d", "fg", "t",
"wsefg", "aweg", "lola", "g")), .Names = c("officer.sw", "officer.ne",
"officer.nw", "officer.EM", "randomothercol"), class = "data.frame", row.names = c(NA,
-11L))), .Names = c("test.raw.data", "test2.raw.data"))
答案 0 :(得分:1)
试试这个:
makeIndex <- function(x, name, sep="-"){
cbind(index=paste(name, seq_along(x[[1]]), sep=sep), x)
}
lapply(seq_along(datalist), function(i)makeIndex(datalist[[i]], names(datalist)[i]))
结果:
[[1]]
index officer.sw officer.ne officer.nw
1 test.raw.data-1 bob <NA> <NA>
2 test.raw.data-2 <NA> angie <NA>
3 test.raw.data-3 brian <NA> <NA>
4 test.raw.data-4 brian <NA> <NA>
5 test.raw.data-5 <NA> <NA> lola
[[2]]
index officer.sw officer.ne officer.nw officer.EM randomothercol
1 test2.raw.data-1 bob NA NA NA angie
2 test2.raw.data-2 NA angie NA NA b
3 test2.raw.data-3 brian NA NA NA c
4 test2.raw.data-4 brian NA NA NA e
5 test2.raw.data-5 NA NA lola NA d
6 test2.raw.data-6 bob NA NA NA fg
7 test2.raw.data-7 NA sandy NA NA t
8 test2.raw.data-8 bob NA NA NA wsefg
9 test2.raw.data-9 bob NA NA NA aweg
10 test2.raw.data-10 NA NA lola NA lola
11 test2.raw.data-11 NA NA NA mr bendy g
答案 1 :(得分:1)
从帖子底部的原始datalist
开始,您可以在lapply
来电中进行一些索引。
> lapply(seq(datalist), function(i) {
datalist[[i]][[paste0("temp", i)]] <-
paste0(names(datalist)[i], seq(nrow(datalist[[i]])))
datalist[[i]]
})
# [[1]]
# officer.sw officer.ne officer.nw temp1
# 1 bob <NA> <NA> test.raw.data1
# 2 <NA> angie <NA> test.raw.data2
# ...
#
# [[2]]
# officer.sw officer.ne officer.nw officer.EM randomothercol temp2
# 1 bob NA NA NA angie test2.raw.data1
# 2 NA angie NA NA b test2.raw.data2
# ...