数据
我希望在r中运行if else序列,但在整个数据框架的每个列内。例如,
如果是rmet_1 = 1
,我需要用-2.68347
代替。
如果是rmet_1 = 2
,则用-2.503847
代替。
每个问题/栏有四个可能的选项,共36列。我想象它会作为一个循环运行,但它是在列vs整个数据框架,这使得它更难以为我弄清楚如何编码。提前感谢您的帮助!
我们不需要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))