这是我的第一个问题,所以请耐心等待我
我正在使用现有变量age.f.sex
在我的数据框wm.13
中创建一个新变量SB1
。在原始数据框中,SB1
表示在联合国儿童基金会多指标类集调查中接受访谈的妇女首次性交的年龄。 SB1
可以采用的值是:
> sort(unique(wm.13$SB1))
[1] 0 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
[26] 30 31 32 33 34 35 36 37 38 39 40 41 42 44 48 95 97 99
以下是值SB1
可以采用的含义
MA9
)sort()
未展示的新来鸟,但只要我使用unique()
我从SB1
创建了一个新变量,我称之为age.f.sex
。
wm.13$age.f.sex <- wm.13$SB1
我用NAs替换了0,97和99值,并且我将原始NA保留在SB1
中。我使用以下代码完成了此操作:
wm.13$age.f.sex[wm.13$SB1 == 0] <- NA
wm.13$age.f.sex[wm.13$SB1 == 97] <- NA
wm.13$age.f.sex[wm.13$SB1 == 99] <- NA
wm.13$age.f.sex[is.na(wm.13$SB1)] <- NA
一切正常,直到这里。但是,我遇到了95值的问题。我想编码,以便在SB1
(即第一次性交的年龄)中具有值95的观察值将具有MA9
的值(即,该女性开始与她的伴侣生活的年龄/丈夫)我的新变量age.f.sex
。
我首先使用此代码
> wm.13$age.f.sex[wm.13$SB1 == 95] <- wm.13$MA9
但是我收到以下错误消息
Error in wm.13$age.f.sex[wm.13$SB1 == 95] <- wm.13$MA9 :
NAs are not allowed in subscripted assignments
经过本网站的一些研究后,我意识到我可能还需要对代码的右侧进行分组,但老实说,我不知道该怎么做。我觉得which()
或if.else()
可能会在这里使用,但我无法弄清楚他们的论点。我在本网站上找到的示例显示了如何归因于一个特定值,但根据观察值在另一个变量中的值,我找不到关于子集的任何内容。
我希望我已经足够清楚了。任何建议都将不胜感激。
谢谢,Manolo
答案 0 :(得分:0)
也许你可以试试:
IF NOT "%1"=="" goto :skipOpenResult
CALL:ECHORED "Open result file? Y[yes] or N[exit]"
choice /c yn /n
if %errorlevel%==1
(
if exist %resultFile%
(
start %resultFile%
)
else
(
CALL:ECHORED "File not found: %resultFile%"
)
)
:skipOpenResult
简而言之,它的工作原理如下:代码检查wm.13 $ SB1是0,97,99还是缺失,然后返回NA。随后,它检查wm.13 $ SB1是否为95,如果是,则返回MA9列中该行的值。在所有其他情况下,它返回SB1值。由于行开头的“wm.13 $ age.f.sex&lt; - ”,返回值将分配给新的age.f.sex变量。
答案 1 :(得分:0)
如错误消息所示,当过滤器包含NA时,无法进行下标分配。避免这种情况的一种方法是明确地将NA包括为factor
级别。以下示例说明了将95
替换为第二列中相应值的可能方法。
# example dataframe
df <- data.frame(a = c(NA, 3, 95, NA),
b = 1:4)
# set a to factor with NA as one of the levels (besides those in a and b)
df$a <- factor(df$a, levels = union(df$a, df$b), exclude = NULL)
# subscripted assignment (don't forget to filter b too!)
df$a[df$a == 95] <- df$b[df$a == 95]
# restore to numeric
df$a <- as.numeric(as.character(df$a))