r - 如何使用 FOR 和 İF 结构缩短代码?
问题描述
我正在寻找另一个替代代码。Kodum çok uzun。
Question_No <-c(1,1,1,1,1,10,10,10,10,10,11,11,11,11,11)
Reply<-c("never","few","medium","much","complete",
"never","few","medium","much","complete",
"never","few","medium","much","complete")
Number_of_Answers<- c(7,1,12,13,18,6,2,12,10,21,6,2,13,11,19)
aa<- data.frame(Question_No,Reply,Number_of_Answers)
replace<- function(x)
{Replys=x['Reply']
if(Replys=="few"){return(2)}
else if(Replys=="much"){return(4)}
else if(Replys=="never"){return(1)}
else if(Replys=="medium"){return(3)}
else {return(5)}}
Replys<- apply(aa,MARGIN = 1,FUN = replace)
aa['Replys']<-Replys
aa= mutate(aa,NA_R = aa$Replys * aa$Number_of_Answers)
aa$result = ifelse(aa$Question_No == 1, sum(aa[1:5,5]),
ifelse(aa$Question_No == 10, sum(aa[6:10,5]),
ifelse(aa$Question_No == 11, sum(aa[11:15,5]),"n")))
我的代码太长了。是否有更有用的代码与 For 和 IF 而不是 IFELSE?
解决方案
是的,代码需要结构化和泛化,所以我希望下面的部分答案可以让您了解如何完整地解决它。避免重复 if 的一种方法是使用字典,然后使用数据库连接。R 有几个匹配和连接函数,示例使用left_join
来自dplyr:
library("dplyr")
df <- data.frame(
Question_No = c(1,1,1,1,1,10,10,10,10,10,11,11,11,11,11),
Reply = c("never","few","medium","much","complete",
"never","few","medium","much","complete",
"never","few","medium","much","complete"),
Number_of_Answers = c(7,1,12,13,18,6,2,12,10,21,6,2,13,11,19)
)
dictionary <- data.frame(
Reply = c("never", "few", "medium", "much", "complete"),
result = 1:5
)
df2 <- left_join(df, dictionary, by="Reply")
df2
推荐阅读
- python - 给定一组要识别的图像和一个训练有素的模型,我如何让模型识别图像?
- xml - Tasker 无法“恢复备份”XML 文档?
- netlogo - Netlogo - 使用行为空间动态更改每个实验的运行时间
- r - 如何修复“open.connection(x, "rb") 中的错误:HTTP 错误 503。” 用 rvest 抓取网站时?
- dart - 颤振飞镖功能在等待后跳到功能结束
- go - golang 中 server.GracefulStop() 的行为
- javascript-objects - 如何修复 javascirpt 中的“不是构造函数”错误
- python - 在 Python 的数据帧行中提取正则表达式匹配项,而不是组
- java - 序列化抛出异常 WriteAbortedException 类不可序列化
- microsoft-graph-api - 你如何获得远程driveItem的权限?