为什么我的for循环不会遍历整个列表?

时间:2017-06-27 21:17:42

标签: r loops for-loop replicate

基本上,我正在列出一些情绪,并尝试将列表中的每个情绪复制6次,然后将它们添加到矢量中。例如:

emotions<-c("Happy","Sad","Angry")

看起来像:

emotions2<-c("Happy","Happy","Happy","Happy","Happy","Happy","Sad","Sad","Sad","Sad","Sad","Angry","Angry","Angry","Angry","Angry","Angry")

现在要做到这一点,我正在使用for循环但由于某种原因它只复制第一个情感,创建向量,      emotions2&LT; -C( “快乐”, “快乐”, “快乐”, “快乐”, “快乐”, “快乐”)

我的代码如下所示: pmd.df3是我的数据框,Emotions是其中的新列,我将存储此信息。

  pmd.df3$Emotions<-(
     for(ele in emotions){
       new.column<-replicate(6,ele)
       print(new.column)
     }
   )

如果你能提供帮助,请告诉我!

2 个答案:

答案 0 :(得分:0)

要实现这一点,您可以使用lapply(将函数应用于列表/向量的每个元素)和unlist(以展平生成的列表列表):

pmd.df3$Emotions <- unlist(lapply(emotions, function(x) { rep(x, 6) }))

完整示例:

emotions <- c("Happy", "Sad", "Angry")
pmd.df3 = data.frame(id = seq(1, 18))

pmd.df3$Emotions <- unlist(lapply(emotions, function(x) { rep(x, 6) }))
pmd.df3 
#    id Emotions
# 1   1    Happy
# 2   2    Happy
# 3   3    Happy
# 4   4    Happy
# 5   5    Happy
# 6   6    Happy
# 7   7      Sad
# 8   8      Sad
# 9   9      Sad
# 10 10      Sad
# 11 11      Sad
# 12 12      Sad
# 13 13    Angry
# 14 14    Angry
# 15 15    Angry
# 16 16    Angry
# 17 17    Angry
# 18 18    Angry

答案 1 :(得分:0)

为了躲避shambalambala的回答,代表可以原生地处理这个问题而不需要lapply或for循环。

emotions <- c("Happy", "Sad", "Angry")
pmd.df3 = data.frame(id = seq(1, 18))
pmd.df3$Emotions <- rep(emotions, each = 6)

   id Emotions
1   1    Happy
2   2    Happy
3   3    Happy
4   4    Happy
5   5    Happy
6   6    Happy
7   7      Sad
8   8      Sad
9   9      Sad
10 10      Sad
11 11      Sad
12 12      Sad
13 13    Angry
14 14    Angry
15 15    Angry
16 16    Angry
17 17    Angry
18 18    Angry
相关问题