我遇到了从for循环中保存结果的问题,我可能犯了一个非常基本的错误。我试图使用for循环来获取两列中的第一个字母,如果其中任何一个是T,则为'foraging'的'trail.type'赋值,否则给出'internest'的值。下面的代码可以做到这一点,但是当我查看每个数据帧时,该列尚未添加。有谁知道为什么会这样?
我正在使用的代码:
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 :(得分:2)
好吧,如果我们有数据框列表,我们可以使用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}}