我正在努力处理具有结构(原始数据)的列表列表:
我需要的是具有结构(转换后的数据)的列表列表:
即 对于子列表中的每个不同的行(名称),我需要一个新的子列表。该子列表将具有该行的名称,该行(名称)将是原始子列表的名称,并且数据将由原始子列表中的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"
答案 0 :(得分:0)
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
答案 1 :(得分:0)
一些初步发现:
下面的代码将每个列表元素的矩阵转换为data.table对象,并将其绑定到united
data.table中。列表元素的名称保留在列ATIVO
中:
library(data.table)
library(magrittr)
united <- lapply(original, function(x) as.data.table(x[-1, ]) %>% setnames(x[1, ])) %>%
rbindlist(idcol = "ATIVO")
ATIVO Culturas Modalidade de Emprego (Aplicação) LMR (mg/kg) Intervalo de Segurança 1: a1 Algodão Pós-emergência 0,04 (2) 2: a1 Soja Dessecante 4,0 07 dias 3: a1 Soja Pós-emergência 4,0 (1) 4: a2 Cebola Pós-emergência 0,02 60 dias 5: a2 Feijão Pós-emergência 0,02 60 dias 6: a2 Soja Pós-emergência 0,02 60 dias 7: a2 Trigo Pós-emergência 0,02 70 dias
从那里,我们可以检索所请求的数据,例如
united[(order(Culturas, ATIVO)), .(Culturas, ATIVO, `LMR (mg/kg)`)]
Culturas ATIVO LMR (mg/kg) 1: Algodão a1 0,04 2: Cebola a2 0,02 3: Feijão a2 0,02 4: Soja a1 4,0 5: Soja a1 4,0 6: Soja a2 0,02 7: Trigo a2 0,02
当然,数据可以再次分成几部分:
split(united, by = "Culturas")
$Algodão ATIVO Culturas Modalidade de Emprego (Aplicação) LMR (mg/kg) Intervalo de Segurança 1: a1 Algodão Pós-emergência 0,04 (2) $Soja ATIVO Culturas Modalidade de Emprego (Aplicação) LMR (mg/kg) Intervalo de Segurança 1: a1 Soja Dessecante 4,0 07 dias 2: a1 Soja Pós-emergência 4,0 (1) 3: a2 Soja Pós-emergência 0,02 60 dias $Cebola ATIVO Culturas Modalidade de Emprego (Aplicação) LMR (mg/kg) Intervalo de Segurança 1: a2 Cebola Pós-emergência 0,02 60 dias $Feijão ATIVO Culturas Modalidade de Emprego (Aplicação) LMR (mg/kg) Intervalo de Segurança 1: a2 Feijão Pós-emergência 0,02 60 dias $Trigo ATIVO Culturas Modalidade de Emprego (Aplicação) LMR (mg/kg) Intervalo de Segurança 1: a2 Trigo Pós-emergência 0,02 70 dias
或者,要满足OP的预期result
:
split(united, by = "Culturas") %>%
lapply(`[`, j = c("ATIVO", "LMR (mg/kg)")) # data.table syntax
$Algodão ATIVO LMR (mg/kg) 1: a1 0,04 $Soja ATIVO LMR (mg/kg) 1: a1 4,0 2: a1 4,0 3: a2 0,02 $Cebola ATIVO LMR (mg/kg) 1: a2 0,02 $Feijão ATIVO LMR (mg/kg) 1: a2 0,02 $Trigo ATIVO LMR (mg/kg) 1: a2 0,02
为演示起见,我没有过滤"Soja"
。
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(4L, 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,] "Culturas" "Modalidade de Emprego (Aplicação)" "LMR (mg/kg)" "Intervalo de Segurança" [2,] "Algodão" "Pós-emergência" "0,04" "(2)" [3,] "Soja" "Dessecante" "4,0" "07 dias" [4,] "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"