我正在尝试编写一个函数来在一个变量中查找零,并将这些零替换为包含另一个变量值的除法结果。
我的数据:
id apr_days apr_hours
A 1 7
B 2 14
C 0 8
D 0 15
E 0 0
我试图捕捉一个人使用某项政策的时间。在apr_hours为> 0的所有情况下,apr_days中都需要有一个条目来指示相应的天数(apr_hours / 7的值,向下舍入以便仅显示偶数)。
预期产出:
id apr_days apr_hours
A 1 7
B 2 14
C 1 8
D 2 15
E 0 0
我想告诉R的是:对于apr_hours >0 & apr_days ==0
的所有观察,取相应的apr_hours
值,除以7;向下舍入到偶数计数值并使用此值替换0
中的apr_days
。
我认为该功能的结构应如下:
if apr_hours == 0 {
if true: do nothing
} else {
check whether apr >0
if true: do nothing
} else {
calculate apr_hours/7,
round down to even counts,
and replace the 0 of apr_days with this result
}
我完全迷失了,知道如何准确编写代码。任何帮助将受到高度赞赏。
答案 0 :(得分:1)
a <- matrix(c(1, 7, 2, 14, 0, 8, 0, 15, 0, 0), 5, 2, byrow = T)
a[, 1] <- replace(a[, 1], which(a[, 1] == 0), floor(a[a[, 1] == 0, 2]/7))
答案 1 :(得分:1)
你去了:
within(df1,apr_days[apr_days==0] <- apr_hours[apr_days==0] %/% 7)
# id apr_days apr_hours
# 1 A 1 7
# 2 B 2 14
# 3 C 1 8
# 4 D 2 15
# 5 E 0 0
这是解决(并纠正)你的逻辑的解决方案:
df1$apr_days <-
ifelse(df1$apr_days == 0 & df1$apr_hours > 0,
df1$apr_hours %/% 7,
df1$apr_days)
或者jut重新计算所有:
df1$apr_days = df1$apr_hours %/% 7
答案 2 :(得分:0)
if (apr_hours[i] == 0) apr_hours[i] = Math.Floor(apr_days[i]/2)
这是你要找的吗?
答案 3 :(得分:0)
使用data.table
并使用整数除法%/%
,您可以执行以下操作:
setDT(df)
df[apr_days == 0, apr_days := apr_hours %/% 7]
print(df)
id apr_days apr_hours
1: A 1 7
2: B 2 14
3: C 1 8
4: D 2 15
5: E 0 0
答案 4 :(得分:0)
使用ifelse
作为:
df$apr_days = ifelse(df$apr_days == 0 & df$apr_hours > 0 ,
floor(df$apr_hours/7), df$apr_days)
df
# id apr_days apr_hours
# 1 A 1 7
# 2 B 2 14
# 3 C 1 8
# 4 D 2 15
# 5 E 0 0