我有大量的CSV文件,如下所示:
var val1 val2
a 2 1
b 2 2
c 3 3
d 9 2
e 1 1
我想:
我认为我已经设法通过这样做到达第3点:
csvList <- list.files(path = "mypath", pattern = "*.csv", full.names = T)
bla <- lapply(lapply(csvList, read.csv), function(x) x[order(x$val1, decreasing=T)[1:3], ])
lapply(bla,"[", , 1, drop=FALSE)
现在,我列出了每个CSV中的前3个变量。但是,我不知道如何将此列表转换为字符串并仅保留唯一值。
欢迎任何帮助。
谢谢!
答案 0 :(得分:1)
问题在于使用bla
提取drop=FALSE
的第一列。这会将结果保留为列列表(每行具有name
),而不是将其强制转换为最低维度,即向量。请改为使用drop=TRUE
,然后使用unlist
,然后使用unique
作为@Frank建议:
unique(unlist(lapply(bla,"[", , 1, drop=TRUE)))
如您所知,drop=TRUE
是默认设置,因此您甚至不必包含它。
更新以评论中的新要求。
要保留前两列var
和var1
并删除var
中的重复项(仅保留唯一的var
),请执行以下操作:
## unlist each column in turn and form a data frame
res <- data.frame(lapply(c(1,2), function(x) unlist(lapply(bla,"[", , x))))
colnames(res) <- c("var","var1") ## restore the two column names
## remove duplicates
res <- res[!duplicated(res[,1]),]
请注意,这只会保留每个唯一var
的第一行。这是删除重复项的定义。
希望这有帮助。