首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果(条件),将1加到以前的值,否则减去1。

如果(条件),将1加到以前的值,否则减去1。
EN

Stack Overflow用户
提问于 2018-06-14 23:36:43
回答 2查看 677关注 0票数 2

我在dataframe上追踪食物和饱腹感。我希望在吃一顿饭时,让R在饱腹感列中将1添加到前面的值中,当没有吃完一顿饭时,让它减去1 (meal=NA)。

我试图通过嵌套在for loop语句中的ifelse来实现这一点,但是它不起作用。

我目前的尝试是:

代码语言:javascript
复制
ifelse(Meals=="NA",for (i in 1:length(Day$Fullness)){
  print(Day$Fullness[[i]]-1+i)}, for (i in 1:length(Day$Fullness)){
  print(Day$Fullness[[i]]+1+i)}

Error: Error in ans[test & ok] <- rep(yes, length.out = length(ans)) 
[test & ok] : 
  replacement has length zero
In addition: Warning message:
In rep(yes, length.out = length(ans)) :
 'x' is NULL so the result will be NULL

我不知道如何在这里创建一个桌子,但我会尽我最大的努力使之有意义的。

时间:上午9:30,上午10:30,上午10:30等食物: NA,早餐,NA,零食,NA等,饱腹感:从0到10不等。

我目前的饱腹感数据只是我创建的一个向量,但我希望它从0开始,每餐后增加1,而在没有饭的情况下,每隔30分钟就减少1次(在meal= NA中)。

我肯定还有更好的办法。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-15 00:10:13

这里有一些样本数据和一个潜在的解决方案。

代码语言:javascript
复制
set.seed(123)
meals <- sample(c(1, 1, 1, NA), 20, replace = TRUE)
df <- data.frame(meals = meals)
head(df)
#   meals
# 1     1
# 2    NA
# 3     1
# 4    NA
# 5    NA
# 6     1

df$meals[is.na(df$meals)] <- -1
df$satiety <- cumsum(df$meals)
head(df)
#   meals satiety
# 1     1       1
# 2    -1       0
# 3     1       1
# 4    -1       0
# 5    -1      -1
# 6     1       0
tail(df)
#    meals satiety
# 15     1       5
# 16    -1       4
# 17     1       5
# 18     1       6
# 19     1       7
# 20    -1       6

我建议不要把没有一顿饭(或不吃一顿饭)编码为NA,意思是“我不知道”。如果你用NA来表示这顿饭被跳过了,你就不知道了,你应该给它一些能代表一顿不吃的饭的东西。在这里,由于您的模型将不吃一顿饭解释为对饱腹感有负面影响(而不是中性影响),因此-1实际上很有意义。如果这就是您在模型中使用它的方式,那么就以这种方式编写它。

票数 1
EN

Stack Overflow用户

发布于 2018-06-15 00:06:14

这里有几件事。

  1. 除非数据包含字符串" NA ",否则应该使用命令is.na(x)检查一个或多个值是否为NA。然而,如果没有样本数据,很难判断。
  2. 一般来说,在R中,你会想要使用矢量化的解。在许多情况下,如果您使用的是for循环,则它是不正确的。
  3. 你已经说过“食物”是在数据仓库里的。因此,您需要将Meals作为该数据框架的子集。例如,如果数据帧是data,那么表达式应该是data$Meals

总结所有这些,我可能会做以下类似的事情:

代码语言:javascript
复制
Day$Meals.na <- is.na(Day$Meals)
print(Day$Fullness + (-1)^Day$Meals.na)

这使用了一个很好的技巧:TRUEFALSE都以10的形式存储在幕后。

希望这能帮上忙。如果不是,我们确实需要样本数据和预期的输出才能有更多的用途。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50867316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档