我正在尝试在数据框中创建一个新变量,该变量返回满足条件的变量名称,但是我在数据集中也有一个chr变量,因此必须使用某种数字包装器。
之前的数据集:
ChrV | V1 | V2 | V3 Obs 1 | chr1 | 0.65 | 0.30 | 0.40 Obs 2 | chr2 | 0.35 | 0.75 | 0.42 Obs 3 | chr3 | 0.10 | 0.43 | 0.80
我的解决方案:
保存chr变量。
ChrV <- ds$ChrV
从数据集中删除chr变量(替代数字包装器)
ds$ChrV <- NULL
创建新列-应用于数据集的所有行:函数-粘贴x的绝对值大于等于0.5的列名称。
ds$V4 <- apply(ds, 1, function(x) paste(names(which(abs(x) >= 0.5))))
将chr变量绑定回数据集。
ds <- cbind(ChrV, ds)
输出:
ChrV | V1 | V2 | V2 | V4 Obs 1 | chr1 | 0.65 | 0.30 | 0.40 | Var 1 Obs 2 | chr2 | 0.35 | 0.75 | 0.42 | Var 2 Obs 3 | chr3 | 0.10 | 0.43 | 0.80 | Var 3
我的问题:
虽然我的解决方案有效,但是我需要找到一个忽略chr变量的更优雅的解决方案(因此,它仅考虑数字变量,而无需删除变量并在以后再次绑定它们),那就是也适用于任何数据集,无论列和行的数量如何。
dput(ds)
structure(list(
ChrV = c("chr1", "chr2", "chr3"),
V1 = c(3, 2, 1),
V2 = c(1, 3, 2),
V3 = c(1, 2, 3)),
row.names = c(NA, -6L),
class = c("data.table", "data.frame"),
.internal.selfref = <pointer: 0x0000000002541ef0>)