2017-01-10 12 views
1

forループから結果を保存する際に問題があり、おそらく非常に基本的な間違いです。私は2つの列から最初の文字を取るためにforループを使用しようとしていて、どちらかがTならば、 'foraging'の 'trail.type'の値を与え、そうでなければ '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

'$ trail.type < - ifelse(grepl("^T "、name $ from)| grepl("^T "、" $ for "、" foraging "、" internest ")' –

+0

あなたのコードは私: 'trail.type'が' name'に追加されましたか? – Phil

答えて

2

まあ、我々はデータフレームのリストを持っている場合、我々は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は、データフレームのあなたのリストである

に値を割り当てることに基づいている場合、すべてのリストについては、我々は確認してください。例えば

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

パーフェクト。本当にありがとう、それは私がそれがしたいことを正確に行います。私は本当にlapply mapplyなどを使用する方法を学ぶ必要があります –

関連する問題