gpt4 book ai didi

r - 如何在 R 的所有列中应用 "for loop"?

转载 作者:行者123 更新时间:2023-12-02 06:28:04 24 4
gpt4 key购买 nike

我有这些数据和我创建的用于根据条件 (if) 转换列中所有元素的 for。 (我知道还有更多方法可以做到这一点......)

这里是:

S1 <- c(0,1,1,0,0,2,2,1,1,1,1,1,0)
S2 <- c(2,1,0,1,0,2,1,1,0,1,2,2,1)
S3 <- c(0,1,0,0,1,2,0,1,2,1,2,0,2)
S4 <- c(2,1,0,2,1,2,2,1,2,1,2,2,0)

df <- data.frame(S1,S2,S3,S4)

for (i in 1:nrow(df)){
if(df[i,1] == 0){
df[i,1] <- "A/A"
}
if(df[i,1] == 1){
df[i,1] <- "A/T"
}
if(df[i,1] == 2){
df[i,1] <- "T/T"
}
if(df[i,1] == "NaN"){
df[i,1] <- 0
}
}

这是实际的:

S1  S2  S3  S4
0 2 0 2
1 1 1 1
1 0 0 0

当我运行 for 时,它仅适用于第一列,因为我描述了 df[i,1]。问题是,如何同时对所有列执行此操作?有什么办法可以解决这个问题吗?

谢谢

最佳答案

使用 sapply 遍历列,然后使用 == 进行逻辑比较以查找和替换。

sapply(df, function(x){
x[x==0] <- "A/A";
x[x==1] <- "A/T";
x[x==2] <- "T/T";
x[x=="NaN"] <- 0;
x
})

这会产生:

      S1    S2    S3    S4   
[1,] "A/A" "T/T" "A/A" "T/T"
[2,] "A/T" "A/T" "A/T" "A/T"
[3,] "A/T" "A/A" "A/A" "A/A"
[4,] "A/A" "A/T" "A/A" "T/T"
[5,] "A/A" "A/A" "A/T" "A/T"
[6,] "T/T" "T/T" "T/T" "T/T"
[7,] "T/T" "A/T" "A/A" "T/T"
[8,] "A/T" "A/T" "A/T" "A/T"
[9,] "A/T" "A/A" "T/T" "T/T"
[10,] "A/T" "A/T" "A/T" "A/T"
[11,] "A/T" "T/T" "T/T" "T/T"
[12,] "A/T" "T/T" "A/A" "T/T"
[13,] "A/A" "A/T" "T/T" "A/A"

如果要替换df并保留data.frame结构,那么使用lapply

df[,] <- lapply(df, function(x){
x[x==0] <- "A/A";
x[x==1] <- "A/T";
x[x==2] <- "T/T";
x[x=="NaN"] <- 0;
x
})

关于r - 如何在 R 的所有列中应用 "for loop"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50046723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com