首页 > 解决方案 > 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]>

看看我所尝试的,有没有更好的方法或方法来修复我当前的代码,以便有一个包含我想要的输出的新列。

提前谢谢你的帮助!!

标签: r

解决方案


  • print只是打印值,它没有returnreturn如果您想保存它,请使用它。
  • 您不应该使用 . 为每个值一个一个地执行此操作lapply。有一些矢量化的方法可以实现这一点。您可以使用ifelse此处传递整个向量 ( DDM$latency)。嵌套的简化版本ifelsedplyr::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'))

推荐阅读