gpt4 book ai didi

r - 在 sqldf 语句中应用 CASE WHEN 来操作多列

转载 作者:行者123 更新时间:2023-12-04 15:10:16 25 4
gpt4 key购买 nike

我有一个数据框 datwe有 37 列。我有兴趣将第 23 到 35 列中的整数值(1,2,99)转换为字符值('Yes','No','NA')。

datwe$COL23 <- sqldf("SELECT CASE COL23 WHEN 1 THEN 'Yes'
WHEN 2 THEN 'No'
WHEN 99 THEN 'NA'
ELSE 'Name ittt'
END as newCol
FROM datwe")$newCol

我一直在用上面的 sqldf语句来分别转换每一列。我想知道是否还有其他聪明的方法可以做到这一点,也许是应用函数?

如果您需要任何可重现的数据来构建数据框 datwe ,我这里补充一下。谢谢。

编辑:
示例 datwe
set.seed(12)
data.frame(replicate(37,sample(c(1,2,99),10,rep=TRUE)))

最佳答案

不知道你为什么使用 sqldf ,看这个例子:

#dummy data
set.seed(12)
datwe <- data.frame(replicate(37,sample(c(1,2,99),10,rep=TRUE)))

#convert to Yes/No
res <- as.data.frame(
sapply(datwe[,23:37], function(i)
ifelse(i==1, "Yes",
ifelse(i==2, "No",
ifelse(i==99,NA,"Name itttt")))))

#update dataframe
datwe <- cbind(datwe[, 1:22],res)

#output, just showing first 2 columns
datwe[,23:24]
# X23 X24
# 1 No Yes
# 2 Yes Yes
# 3 Yes No
# 4 No No
# 5 Yes No
# 6 Yes Yes
# 7 <NA> No
# 8 No No
# 9 Yes <NA>
#10 No <NA>

编辑:
使用 sqldf在带有外部变量的 for 循环中:
library(sqldf)

#dummy data
set.seed(12)
datwe <- data.frame(replicate(37,sample(c(1,2,99),10,rep=TRUE)))

#sqldf within a loop
for(myCol in paste0("X",23:37))
datwe[,myCol] <-
fn$sqldf("SELECT CASE $myCol
WHEN 1 THEN 'Yes'
WHEN 2 THEN 'No'
WHEN 99 THEN 'NA'
ELSE 'Name ittt'
END as newCol
FROM datwe")$newCol

#check output, showing only 2 columns
datwe[,23:24]
# X23 X24
# 1 No Yes
# 2 Yes Yes
# 3 Yes No
# 4 No No
# 5 Yes No
# 6 Yes Yes
# 7 NA No
# 8 No No
# 9 Yes NA
# 10 No NA

关于r - 在 sqldf 语句中应用 CASE WHEN 来操作多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30725137/

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