【问题标题】:How to iterate over a column and assign value based on another column without a for loop?如何在没有for循环的情况下迭代列并基于另一列分配值?
【发布时间】:2020-03-10 05:22:47
【问题描述】:

我正在尝试根据另一列有效地为一列分配值,但没有 for 循环,因为这需要太长时间。

我正在做这样的事情:如果参考列值大于某个随机数,我将 1 分配给新列。否则,赋值为 0。无法找出没有循环的最佳方法。我尝试了dplyrcase_when,但这并没有遍历每一行。

谢谢!

for (i in 1:nrow(data)) {
  if (data$value[i] > runif(1, 0, 1.7)) {
     temp$newValue[i] <- 1
  } else{
     temp$newValue[i] <- 0
  }
}

【问题讨论】:

  • 试试temp$newValue &lt;- +(data$value &gt; runif(nrow(data), 0, 1.7))

标签: r dplyr


【解决方案1】:
c0=data.frame(c(1,4,6,3,7,3),c(2,8,2,4,9,4))
names(c0)=c("A","B")

c0$C=ifelse(c0[,"A"]>runif(1,0,1.7),1,0)
c0

我不确定我是否理解你。如果我有任何误解,请发表评论。

A
<dbl>
B
<dbl>
C
<dbl>
1   2   0       
4   8   1       
6   2   1       
3   4   1       
7   9   1       
3   4   1       
6 rows

这是我如何使用 A 生成 C

【讨论】:

    【解决方案2】:

    这能解决您的问题吗?

    数据

    set.seed(1)
    df <- data.frame(
      refcol = rnorm(10)
    )
    
    randvalue <- 0
    

    解决方案

    df$newcol <- ifelse(df$refcol > randvalue, 1, 0)
    

    结果

    df
           refcol newcol
    1   0.2352207      1
    2  -0.3307359      0
    3  -0.3116238      0
    4  -2.3023457      0
    5  -0.1708760      0
    6   0.1402782      1
    7  -1.4974267      0
    8  -1.0101884      0
    9  -0.9484756      0
    10 -0.4939622      0
    

    【讨论】:

      猜你喜欢
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2019-01-07
      • 2017-03-01
      • 1970-01-01
      相关资源
      最近更新 更多