R,将for循环结果放入向量中,然后将此向量添加到数据帧中

时间:2020-08-09 01:20:55

标签: r

我制作了一个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”并查看新列时,每一行都显示“ ”。我认为可能是因为我的for循环的输出是字符。

这是我运行数据框后新列Newlat中的输出:

<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>

看看我尝试了什么,有没有更好的方法或一种方法来修复我的当前代码,以便会有一个新列显示我想要的输出。

谢谢您的帮助!

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'))