R根据条件从向量到数据帧列随机分配不同的值

时间:2019-02-03 22:12:28

标签: r

我有一个名为df的问题Q1答案的数据集

df = data.frame(ID = c(1:5), Q1 = c(1,1,3,4,2))

我还有一个向量,其中每个元素都是一个单词

words = c("good","bad","better","improved","fascinating","improvise")

我的目标

  • IF Q1 = 1或Q1 = 2 ,然后将向量words中的值随机分配给新创建的列称为followup

我的尝试

#If answer to Q1 is 1 or 2, then randomly allocate a word to newly created column "followup"
#Else leave blank
df$followup=ifelse(df$Q1==1 | df$Q1==2,sample(words,1),"")

但是,这样做会导致对包含1或2的每一行重复相同个随机选择的单词。

  ID Q1    followup
1  1  1 fascinating
2  2  1 fascinating
3  3  3            
4  4  4            
5  5  5  

我希望每个单词都可以随机且不同

任何输入都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

为此,我们可以使用

df$followup[df$Q1 %in% 1:2] <- sample(words, sum(df$Q1 %in% 1:2))
df
#   ID Q1  followup
# 1  1  1    better
# 2  2  1 improvise
# 3  3  3      <NA>
# 4  4  4      <NA>
# 5  5  2       bad

由于我们是在单个调用中生成这些值,因此replace = FALSE中的sample(默认值)会提供所有值都不同的理想结果。