2017-01-10 3 views
1

У меня проблема с сохранением результатов из цикла for, и, вероятно, я ошибаюсь. Я пытаюсь использовать цикл for, чтобы взять первую букву из двух столбцов, и если любой из них является Т, то дайте значение для 'trail.type' 'foraging', иначе укажите значение «internest». Этот код работает для этого, но затем, когда я просматриваю каждый из кадров данных, столбец не был добавлен. Кто-нибудь знает, почему это может быть?сохранение результатов из цикла for

код я использую:

dfs <- Filter(function(x) is(x, "data.frame"), mget(ls())) 

for (name in dfs){ 
    name$fromf<-substr(name$from,1,1) 
    name$tof<-substr(name$to,1,1) 
    name$trail.type <- ifelse(name$fromf=='T', "foraging", 
            ifelse(name$tof=='T', "foraging", 
              'internest')) 
    name$fromf <- NULL 
    name$tof <- NULL 
} 

данные я использую:

from to strength 
N1 N2 1.67 
N1 T1 1.11 
N2 N3 0.67 
N3 N4 1.00 
N3 N5 0.29 
N5 N6 5.00 
+0

Просьба воспроизводимый пример? –

+0

Попробуйте 'name $ trail.type <- ifelse (grepl ("^T ", name $ from) | grepl ("^T ", name $ to)," foraging "," internest ")' –

+0

Ваш код работает для me: 'trail.type' добавляется в' name'? – Phil

ответ

2

Ну, если у нас есть список dataframes мы можем использовать lapply. Для каждого списка мы проверяем, если from или to столбца начинается с буквой T и основан на том, что мы относим значение в новый столбец trail.type

lapply(lst1, function(x) cbind(x, trail.type = ifelse(grepl("^T", x[["from"]]) 
           | grepl("^T", x[["to"]]), "foraging", "internest"))) 

где lst1 ваши списки dataframes.

Например,

lst1 <- list(name, name) 
lapply(lst1, function(x) cbind(x, trail.type = ifelse(grepl("^T", x[["from"]]) 
          | grepl("^T", x[["to"]]), "foraging", "internest"))) 

#[[1]] 
# from to strength trail.type 
#1 N1 N2  1.67 internest 
#2 N1 T1  1.11 foraging 
#3 N2 N3  0.67 internest 
#4 N3 N4  1.00 internest 
#5 N3 N5  0.29 internest 
#6 N5 N6  5.00 internest 

#[[2]] 
# from to strength trail.type 
#1 N1 N2  1.67 internest 
#2 N1 T1  1.11 foraging 
#3 N2 N3  0.67 internest 
#4 N3 N4  1.00 internest 
#5 N3 N5  0.29 internest 
#6 N5 N6  5.00 internest 
+1

Perfect. Большое спасибо, что делает именно то, что я хочу, чтобы он делал. Я действительно должен научиться использовать lapply mapply и т. Д. –

Смежные вопросы