首页 > 解决方案 > 根据名称对列表列表进行子集

问题描述

我正在努力处理具有结构的列表(原始数据):

原始数据

我需要的是具有结构的列表列表(转换后的数据):

转换后的数据

即对于我的子列表中的每个不同的行(名称),我需要一个新的子列表。该子列表将具有该行的名称,而 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"

标签: rlistsubsetreshapesublist

解决方案


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

推荐阅读