在r中用ifelse突变
我正在制作一个数据帧(尺寸:10155×33)。数据框中很少有行和列是在r中用ifelse突变,r,if-statement,dplyr,mutate,R,If Statement,Dplyr,Mutate,我正在制作一个数据帧(尺寸:10155×33)。数据框中很少有行和列是 rg[1:3, 1:4] REF_NO children age_band status 1 2148 1 45-50 Partner 2 8099 1 61-65 Partner 3 6611 3 31-35 Partner > table(rg_age_band) 18-21 22-25 26-30 31-35
rg[1:3, 1:4]
REF_NO children age_band status
1 2148 1 45-50 Partner
2 8099 1 61-65 Partner
3 6611 3 31-35 Partner
> table(rg_age_band)
18-21 22-25 26-30 31-35 36-40 41-45 45-50 51-55
63 456 927 1061 1134 1112 1359 1052
55-60 61-65 65-70 71+ Unknown
1047 881 598 410 55
对于变量age_band,我想使用tidyverse函数separate()、mutate()和chaining运算符进行以下嵌套操作:
library(tidyr); library(dplyr)
rg1=rg %>%
separate(age_band, into = c("a1", "a2"), sep="-") %>%
mutate(a1 = as.numeric(ifelse(rg$a1=="71+", 71, rg$a1)),
a2 = as.numeric(a2),
age = 0.5*(a1+a2)) %>%
select(-a1-a2)
Error: Column `a1` must be length 10155 (the number of rows) or one, not 0
错误:列a1
必须是长度10155(行数)或1,而不是0请建议可以执行的操作。
当我在ifelse语句中不使用“$”的情况下运行代码时,我会得到一个错误未找到对象“a1”,而通常,在使用链式操作符&mutate时,我们不需要“$”。
关于这个问题的讨论无法给出任何有用的解决方案。
我尝试了一些代码,问题是
mutate(a1 = as.numeric(ifelse(rg$a1=="71+", 71, rg$a1))
也
编辑:附加一个以下代码不会产生任何错误:
rg <- data.frame(REF_NO = c(2148, 8099, 6611), children = c(1,1,3), age_band = c("45-50", "61-65", "71+"))
rg %>%
tidyr::separate(age_band, into = c("a1", "a2"), sep="-") %>%
mutate(a1 = as.numeric(ifelse(a1=="71+", 71, a1)),
a2 = as.numeric(a2),
age = 0.5*(a1+a2)) %>%
select(-a1, -a2)
rg%
tidyr::分开(年龄段,分为=c(“a1”、“a2”)、sep=“-”%>%
变异(a1=as.numeric(如果其他(a1==“71+”,71,a1)),
a2=作为数字(a2),
年龄=0.5*(a1+a2))%>%
选择(-a1,-a2)
在调用mutate时,a1尚未创建,因此rg$a1为NULL或长度为零;因此ifelse的长度为零。它是由tidyr中的separate()函数创建的。在我看来,您不应该需要rg$a1
,只需尝试使用:as.numeric(ifelse(rg$a1==“71+”,71,a1))
。可能还有别的问题……这对我也有好处。然而,当我一点一点地运行我的代码[有或没有“$”]时[例如,每次都有一条语句在里面变化],代码的各个部分都在工作。但是在一起运行整个块时,我会遇到前面提到的错误。奇怪的行为,我无法理解。那么,您的数据中可能有其他东西造成了麻烦。你能试着一次运行一千行吗:rg[1:1000,]%>%…
并试着缩小范围吗?也许在你的问题中包含一个更大的数据摘录?我附上了一个示例数据。使用此示例,我仍然无法使用上面提供的代码重现任何错误。警告用于解释在您的数据中引入的NA:1:预期2个。在237行[9,73,98,115,164,165,181,202,233,250,257,286,311,323,341,368,372,381,383,400,…]中填充了
NA`的缺失片段。如果a1是“未知”的,则警告您对于“71+”a2变量是NA。2:NAs由强制引入
是来自as.numeric
操作的警告
rg <- data.frame(REF_NO = c(2148, 8099, 6611), children = c(1,1,3), age_band = c("45-50", "61-65", "71+"))
rg %>%
tidyr::separate(age_band, into = c("a1", "a2"), sep="-") %>%
mutate(a1 = as.numeric(ifelse(a1=="71+", 71, a1)),
a2 = as.numeric(a2),
age = 0.5*(a1+a2)) %>%
select(-a1, -a2)