Dataframe / For-Loop帮助-尝试将任何大于0的数字更改为列号

dxxyhpgq  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(129)

我有一个分类单元相对丰度的数据框。我正在做一个维恩图,需要我的数据在存在/不存在的格式。我想对应于列号,其中我有这样的数据:
| 一个|B| c|
| --------------|--------------|--------------|
| 1| 0|三|
| 0|二|0|
| 0|二|三|
我需要找出如何使用R,而不是手动更改值。我已经找到了一种将值更改为列编号的方法,但是它会更改整行,而不仅仅是大于零的值。我尝试添加if语句,但它不像我定义的i那样工作。

# I tried this first - which changes all values in the column to column number. 

for(i in 1:ncol(x)) {
  x[ ,i] <- i 
}

# not quite sure how to change it to account for the values and only change value if > 0 

# Doing something like this did not work... I added if statement both before and after defining  
# x[,i] <- i to see what that would do... but no luck. 

for(i in 1:ncol(x)) {
  if(x == 0) {
    return(0)
  }
    x[,i] <- i
}
iqih9akk

iqih9akk1#

你很接近了!这应该可以工作:

for(i in 1:ncol(x)) {
  x[x[, i] > 0 ,i] <- i 
}

上面的代码实际上是相当有效的,但你可能会发现这更容易理解:

for(i in 1:ncol(x)) {
  x[, i] <- ifelse(x[ ,i] > 0, i, 0)
}

相关问题