使用if-else将公式应用于数据帧中数据帧的每一行



我有一个数据帧的数据帧,其中每个数据帧的第8列是一个数字。对于该列的每个条目,对于每个数据帧,我希望使用if-else语句来确定数字是否大于0.5。如果它大于0.5,我想创建一个包含1-(数字(的新列。如果它小于.5,我希望新列包含原始数字的副本。

例如

[[1]]
DTM 2287  2 16  G 0.187500  C 0.812500
DTM 2290  2 16  A 0.187500  C 0.812500
DTM 2291  2 16  C 0.812500  G 0.187500
DTM 2293  2 16  T 0.000000  C 1.000000
DTM 2305  2 16  G 0.000000  C 1.000000

我想输出如下:

[[1]]

DTM 2287  2 16  G 0.187500  C 0.812500 0.187500
DTM 2290  2 16  A 0.187500  C 0.812500 0.187500
DTM 2291  2 16  C 0.812500  G 0.187500 0.187500
DTM 2293  2 16  T 0.000000  C 1.000000 0
DTM 2305  2 16  G 0.000000  C 1.000000 0

我试过这个:

files.x<-lapply(file.list, function(y){
if (test[,8] > 0.5) {
test$fold=(1-x[,8])
} else {test$fold=x[,8]}})

但是得到一个关于列编号不正确的错误。

我试过在单个数据帧上测试它,这是可行的,但它将函数应用于每一行,而不仅仅是那些值超过的行。5

test2<-if (test[,8] > 0.5){test$fold=1-test[,8]} else {test$fold=test[,8]}

任何帮助都将不胜感激。

我们可以使用lapply在列表上循环,并使用与处理标量值的if/else相比已矢量化的ifelse

new_list <- lapply(file.list, function(y) 
{y$fold <- ifelse(y[,8] > 0.5,1-y[,8], y[,8]);y})

我们可以将mapdplyr一起使用

library(purrr)
library(dplyr)
new_list <- map(file.list,  ~ 
.x %>%
mutate(fold = case_when(.[[8]] > 0.5 ~
1 - .[[8]], 
TRUE ~ .[[8]]))

相关内容

最新更新