【问题标题】:if/then loop within columnif/then 在列内循环
【发布时间】:2021-11-17 08:31:36
【问题描述】:

我希望在 r 中运行 if else 序列,但要在整个数据帧的每一列中运行。例如。

如果是rmet_1 = 1,我需要将其替换为-2.68347

但是,如果rmet_1 = 2,它将被替换为-2.503847

每个问题/列有四种可能的选择,总共有 36 列。 我想象它会作为一个循环运行,但它在列与整个数据框中,这让我更难弄清楚如何编码。提前感谢您的帮助!

【问题讨论】:

标签: r loops for-loop


【解决方案1】:

我们不需要if/else 条件。可以使用命名向量来匹配和替换每列中的值。下面的代码循环遍历列 (lapply) 并将键/值向量与列的值匹配。

nm1 <- setNames(c(-2.68347, -2.503847, -2.35, -2.65), 1:4)
df1[] <- lapply(df1, function(x) nm1[as.character(x)])

如果元素是1到4,那么我们甚至不需要命名向量,即只需按顺序传递一个向量并利用位置索引

df1[] <- c(-2.68347, -2.503847, -2.35, -2.65)[as.matrix(df1)]

数据

set.seed(24)
df1 <- as.data.frame(matrix(sample(1:4, 10 * 4, replace = TRUE), ncol = 4))

【讨论】:

  • 这是在我的整个数据集上应用新值,而不仅仅是我想要的列。有什么建议吗?
  • @SarahBerretta 只需对感兴趣的列进行子集化,即 df1[1:5] &lt;- c(-2.68347, -2.503847, -2.35, -2.65)[as.matrix(df1[1:5])] 如果您只想要前 5 列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2014-06-07
  • 2014-05-27
  • 2016-01-05
  • 2016-01-10
  • 2016-01-22
  • 1970-01-01
相关资源
最近更新 更多