Prr*_*dep 6 r apply dataframe sqldf
我有一个datwe37列的数据框.我有兴趣将第23到35列中的整数值(1,2,99)转换为字符值('是','否','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
Run Code Online (Sandbox Code Playgroud)
我一直在使用上面的sqldf语句分别转换每一列.我想知道是否有其他智能方法可以做到这一点,也许应用功能?
如果您需要任何可重现的数据来构建数据帧datwe,我将在此处添加它.谢谢.
编辑:示例 datwe
set.seed(12)
data.frame(replicate(37,sample(c(1,2,99),10,rep=TRUE)))
Run Code Online (Sandbox Code Playgroud)
不确定您使用的原因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>
Run Code Online (Sandbox Code Playgroud)
编辑:
使用sqldf内的用于与外部可变环:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2743 次 |
| 最近记录: |