我在dataframe上追踪食物和饱腹感。我希望在吃一顿饭时,让R在饱腹感列中将1添加到前面的值中,当没有吃完一顿饭时,让它减去1 (meal=NA)。
我试图通过嵌套在for loop语句中的ifelse来实现这一点,但是它不起作用。
我目前的尝试是:
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中)。
我肯定还有更好的办法。
谢谢。
发布于 2018-06-15 00:10:13
这里有一些样本数据和一个潜在的解决方案。
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实际上很有意义。如果这就是您在模型中使用它的方式,那么就以这种方式编写它。
发布于 2018-06-15 00:06:14
这里有几件事。
is.na(x)检查一个或多个值是否为NA。然而,如果没有样本数据,很难判断。for循环,则它是不正确的。data,那么表达式应该是data$Meals。总结所有这些,我可能会做以下类似的事情:
Day$Meals.na <- is.na(Day$Meals)
print(Day$Fullness + (-1)^Day$Meals.na)这使用了一个很好的技巧:TRUE和FALSE都以1和0的形式存储在幕后。
希望这能帮上忙。如果不是,我们确实需要样本数据和预期的输出才能有更多的用途。
https://stackoverflow.com/questions/50867316
复制相似问题