r - R,将 for 循环结果放入向量中,并将该向量添加到数据框中
问题描述
我制作了一个 for 循环,它需要延迟(时间)并输出看到的总分。(即:延迟=1000,看到的分数=“一”)。我想将 for 循环的结果放入我当前的数据框中,在一个新列中。所以,例如,会有一个列,“一”,“二”,“一”..等等。有人能帮我吗?
这是我到目前为止所尝试的:
我尝试从这个 for 循环创建一个向量。我读到其他问题,最好在 R 上使用向量。
首先,我把这个 for 循环变成了一个名为“score”的函数:
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
这是函数的输出,我只包含了几行,因为它很长:
[[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”并查看每行显示“<chr [1]>”的新列时。我认为这可能是因为我的 for 循环的输出是字符。
这是我的新专栏的输出,Newlat
如果我运行我的数据框:
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [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'))
推荐阅读
- python - 如何通过列表查看每个字符串中的第一个字母是否为大写?(Python)
- excel - 我需要在 ms excel 中按系列顺序填写单元格
- python - 在 pandas 中查找匹配条件的第 N 行
- node.js - 如何在异步函数中等待猫鼬查询结果?
- authentication - 如何在 C 客户端中使用 MQCSP 中的 userId 进行 IBM MQ 连接认证
- ionic-framework - 如何为 Ionic 3 页面中的嵌入式网页清理此 URL?
- javascript - Javascript 迭代 Json 数组以获取值
- c++ - 此 TreeVisitor 函数如何用于此二叉搜索树分配
- sql-server - 将 Tableau 计算转换为 SQL 查询
- java - 如何为“抽屉”菜单制作自动调整大小的边框窗格