【发布时间】:2019-08-02 21:21:51
【问题描述】:
我正在尝试在我的数据框中创建一个新变量,它返回满足条件的变量名称,但是我在数据集上还有一个 chr 变量,因此必须应用某种数字包装器。
之前的数据集:
ChrV | V1 | V2 | V3 观察 1 | chr1 | 0.65 | 0.30 | 0.40 观察 2 | chr2 | 0.35 | 0.75 | 0.42 观察 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 观察 1 | chr1 | 0.65 | 0.30 | 0.40 | 变量 1 观察 2 | chr2 | 0.35 | 0.75 | 0.42 | 变量 2 观察 3 | chr3 | 0.10 | 0.43 | 0.80 | 变量 3
我的问题:
虽然我的解决方案有效,但我需要找到一个更优雅的解决方案,忽略 chr 变量,(因此它只考虑数字变量,我不需要删除变量并稍后再次绑定它们),那就是也适用于任何数据集,无论列数和行数。
输入(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>)
【问题讨论】:
-
你想要每行的最大值索引吗?
max.col(df[2:4])? -
@RonakShah 否,特别是大于等于 0.5 的绝对值
-
@Seni 如果有多个值,预期的输出是什么> | 0.5 |每行?
-
@markus 不应该发生,但如果发生了,那么 NA
标签: r conditional-statements apply sapply