我制作了一个for循环,该循环采用了等待时间(时间)并输出看到的总分。 (即:延迟= 1000,看到的分数=“一个”)。我想将for循环的结果放在新列中的当前数据框中。因此,例如,会有一列包含“一个”,“两个,一个” ..etc。有人可以帮助我吗?
这是我到目前为止尝试过的:
我尝试从此for循环创建向量。我在其他问题上读到,最好在R上使用向量。
首先,我将此for循环转换为一个名为“得分”的函数:
score <- function(i){
if(i<1000){
print("one")
}else if(i<2000){
print("two")
} else if (i < 3000){
print("three")
} else if (i < 4000){
print("four")
}else if (i < 5000){
print("five")
}else if(i < 6000){
print ("six ")
}else if(i<7000){
print("seven")
}else {
print("other")
}
}
然后,我使用lapply
函数将score
函数应用于我的DDM
数据帧,更具体地说是我的Latency
列。我将此lapply
分配给了一个名为Lat
的向量:
Lat <- lapply(DDM$latency, score)
Lat
这是该函数的输出,我只在其很长的一段bc中包含了几行:
[[1]]
[1] "three"
[[2]]
[1] "one"
[[3]]
[1] "two"
[[4]]
[1] "one"
[[5]]
[1] "one"
[[6]]
[1] "one"
[[7]]
[1] "one"
[[8]]
[1] "one"
[[9]]
[1] "one"
[[10]]
[1] "one"
[[11]]
[1] "one"
然后我将此向量作为列添加到我的数据框中。
DDM$Newlat<- c(Lat)
但是问题是当我运行数据框“ DDM”并查看新列时,每一行都显示“
这是我运行数据框后新列Newlat
中的输出:
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
看看我尝试了什么,有没有更好的方法或一种方法来修复我的当前代码,以便会有一个新列显示我想要的输出。
谢谢您的帮助!
答案 0 :(得分:1)
print
仅显示值,而不return
。如果要保存,请使用return
。lapply
来为每个值一个接一个地执行此操作。有矢量化的方法可以实现此目的。您可以在此处使用ifelse
来传递整个向量(DDM$latency
)。嵌套ifelse
的简化版本是dplyr::case_when
。cut
/ findInterval
。诸如此类:DDM$Newlat <- cut(DDM$latency, c(seq(0, 700, 100), Inf),
labels = c('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'other'))