r - 根据名称对列表列表进行子集
问题描述
我正在努力处理具有结构的列表(原始数据):
我需要的是具有结构的列表列表(转换后的数据):
即对于我的子列表中的每个不同的行(名称),我需要一个新的子列表。该子列表将具有该行的名称,而 row(names) 将是原始子列表的名称,数据将由原始子列表中的 a 和 e 列组成。
我真的知道我应该发布一些代码,我会试试这个
original<-list(`a1` = structure(c("", "Culturas", "", "Algodão", "Soja", "Soja", "Modalidade de Emprego", "", "(Aplicação)", "Pós-emergência", "Dessecante", "Pós-emergência", "", "LMR (mg/kg)", "", "0,04", "4,0", "4,0", "Intervalo de", "", "Segurança", "(2)", "07 dias", "(1)"), .Dim = c(6L, 4L)),`a2` = structure(c("Culturas", "Cebola", "Feijão", "Soja", "Trigo", "Modalidade de Emprego (Aplicação)", "Pós-emergência", "Pós-emergência", "Pós-emergência", "Pós-emergência", "LMR (mg/kg)", "0,02", "0,02", "0,02", "0,02", "Intervalo de Segurança", "60 dias", "60 dias", "60 dias", "70 dias"), .Dim = 5:4))
original
$a1 [,1] [,2] [,3] [,4] [1,] "" "Modalidade de Emprego" "" "Intervalo de" [2,] "Culturas" "" "LMR (mg/kg)" "" [3,] "" "(Aplicação)" "" "Segurança" [4,] "Algodão" "Pós-emergência" "0,04" "(2)" [5,] "Soja" "Dessecante" "4,0" "07 dias" [6,] "Soja" "Pós-emergência" "4,0" "(1)" $a2 [,1] [,2] [,3] [,4] [1,] "Culturas" "Modalidade de Emprego (Aplicação)" "LMR (mg/kg)" "Intervalo de Segurança" [2,] "Cebola" "Pós-emergência" "0,02" "60 dias" [3,] "Feijão" "Pós-emergência" "0,02" "60 dias" [4,] "Soja" "Pós-emergência" "0,02" "60 dias" [5,] "Trigo" "Pós-emergência" "0,02" "70 dias"
和结果
result<-list(`soja` = structure(c("a1", "a1","a2", "4,0", "4,0", "0,02"), .Dim = 3:2, .Dimnames = list( NULL, c("ATIVO", "LMR (mg/kg)"))))
result
$soja ATIVO LMR (mg/kg) [1,] "a1" "4,0" [2,] "a1" "4,0" [3,] "a2" "0,02"
解决方案
names<-unique(unlist(simplify2array(lapply(original,`[`,,1))))
my.list3<-list()
i=1
m=1
n=1
for (i in 1:length(nomes)){
nome<-names[i]
my.list3[[nome]]<-matrix(NA,ncol=4)
print(nome)
for (n in 1:length((original))){
for (m in 1:nrow(original[[n]])){
if(nome==original[[n]][m,1]){
vetor<-original[[n]][m,]
vetor[vetor==nome]<-names(original)[[n]]
my.list3[[i]]<-rbind(my.list3[[i]],vetor)
}}}}
for (n in seq_along(my.list3)){
ind <- apply(my.list3[[n]], 1, function(x) all(is.na(x)))
my.list3[[n]] <- my.list3[[n]][ !ind, ]
if (is.matrix(my.list3[[n]])){my.list3[[n]] <- my.list3[[n]][,c(1,3)]}
else{my.list3[[n]] <- my.list3[[n]][c(1,3)]}
rownames(my.list3[[n]])<-c()
if (is.matrix(my.list3[[n]])){colnames(my.list3[[n]])<-c("Ativo","LMR mg/kg")} else{names(my.list3[[n]])<-c("Ativo","LMR mg/kg")}}
my.list3
推荐阅读
- haskell - 为什么Haskell中箭头函数的递归绑定无限循环?
- excel - 使用 excel 中的内置函数在列中查找最后一个“非空”文本匹配项
- kotlin - 在 Kotlin 中将一个对象转换为另一个对象的更好方法是什么?
- css - 网格缩略图垂直对齐顶部
- mongodb - 我无法在 Windows 7 64 位上运行我的 mongodb
- android - 如何在 Android 分页库中为列表、过滤器和搜索维护相同的数据源
- java - 无法解析符号“FilterQuery”
- c# - 伯恩斯坦算法 - 未处理的异常用户
- makefile - 在条件句中使用 makefile 变量的问题
- python - 如何在 python 3 中使用正则表达式忽略 unicode 字符?