我有一个数据帧的数据帧,其中每个数据帧的第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})
我们可以将map
与dplyr
一起使用
library(purrr)
library(dplyr)
new_list <- map(file.list, ~
.x %>%
mutate(fold = case_when(.[[8]] > 0.5 ~
1 - .[[8]],
TRUE ~ .[[8]]))