【问题标题】:Create a function that replace values where n <5 with a random number between 1 and 4 (integer)创建一个函数,将 n <5 的值替换为 1 到 4 之间的随机数(整数)
【发布时间】:2019-05-15 20:40:49
【问题描述】:

我对 R 很陌生,遇到了一个我自己显然无法解决的问题。你应该很容易。

我的目标是编写一个通用函数来操作数据帧 df 中的第 n 列。我希望它对每一行执行一个简单的任务,当 n

df <- data.frame(n= 1:10, y = letters[1:10],
                 stringsAsFactors = FALSE)

什么是最优雅的解决方案?

【问题讨论】:

标签: r dataframe replace


【解决方案1】:

一种方法是根据列创建逻辑索引,根据索引对列进行子集化并分配sampled 值

f1 <- function(dat, col) {
      i1 <- dat[[col]] < 5
      dat[[col]][i1] <- sample(1:4, sum(i1), replace = TRUE)
      dat
  }

f1(df, "n")

【讨论】:

  • 谢谢,很酷。除了 sum(i1),我可以跟踪所有内容。 sum 函数在这种情况下做了什么?
  • @Henrik sample() 第二个参数是size,这是你要生成的随机向量的大小。 i1 是由 TRUE FALSE TRUE TRUE ... 值组成的逻辑向量。在逻辑向量上调用 sum 相当于计算其中的 TRUE 值的数量FALSE0TRUE1)。所以总结i1,你会发现dat[[col]]中的值的数量是&lt; 5,所以你可以告诉sample()你希望它为你生成多少来自[1, 4]的随机值。
  • @Henrik 正如 utubun 建议的那样,sum 仅用于计算小于 5 的元素数。
猜你喜欢
  • 1970-01-01
  • 2021-07-12
  • 2023-04-05
  • 2013-01-02
  • 2013-10-06
  • 2017-04-21
  • 2015-05-12
  • 2015-01-22
  • 2022-01-25
相关资源
最近更新 更多