返回仅满足数字变量条件的变量名称

时间:2019-03-12 11:55:17

标签: r conditional-statements apply sapply which

我正在尝试在数据框中创建一个新变量,该变量返回满足条件的变量名称,但是我在数据集中也有一个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>)   

0 个答案:

没有答案