我正在尝试重新编码从Hispanic
变量和其他6个race
变量派生的种族/民族变量。
我已经尝试了其中一些methods。我无法弄清楚如何保持每个因素的不同水平。
Hispanic
变量具有5个级别:0:NA, 1:yes, 2:no, 3:unable to determine, 99:missing
。
每个race
变量具有3个级别:0:does not apply, 1:applies, 99:missing
。
我的新p1raceeth
变量将具有7个级别:0:Unknown, 1:Black,NH, 2:Hispanic any race, 3:Other, 4:White,NH, 99:missing
。
我也尝试过使用下面的代码对其进行编码,并且它适用于一个race:amakn
变量,但是当我使用相同的代码移动到下一个race
变量时,它将覆盖过去的重新编码。任何建议将非常有帮助。包括有关如何折叠race
和Hispanic
变量中的因子水平以使其更易于管理的建议。
这促使我试图将asian
与nhopi
结合使用。相当兔子洞。
d_a$p1raceeth <- "0"
d_a$p1raceeth[d_a$Hispanic=="0" & d_a$amakn=="0"] <- "0"
d_a$p1raceeth[d_a$Hispanic=="0" & d_a$amakn=="1"] <- "0"
d_a$p1raceeth[d_a$Hispanic=="0" & d_a$amakn=="99"] <- "0"
d_a$p1raceeth[d_a$Hispanic=="1" & d_a$amakn=="0"] <- "2"
d_a$p1raceeth[d_a$Hispanic=="1" & d_a$amakn=="1"] <- "2"
d_a$p1raceeth[d_a$Hispanic=="1" & d_a$amakn=="99"] <- "99"
d_a$p1raceeth[d_a$Hispanic=="2" & d_a$amakn=="0"] <- "99"
d_a$p1raceeth[d_a$Hispanic=="2" & d_a$amakn=="1"] <- "3"
d_a$p1raceeth[d_a$Hispanic=="2" & d_a$amakn=="99"] <- "99"
d_a$p1raceeth[d_a$Hispanic=="3" & d_a$amakn=="0"] <- "0"
d_a$p1raceeth[d_a$Hispanic=="3" & d_a$amakn=="1"] <- "3"
d_a$p1raceeth[d_a$Hispanic=="3" & d_a$amakn=="99"] <- "99"
d_a$p1raceeth[d_a$Hispanic=="99" & d_a$amakn=="0"] <- "99"
d_a$p1raceeth[d_a$Hispanic=="99" & d_a$amakn=="1"] <- "3"
d_a$p1raceeth[d_a$Hispanic=="99" & d_a$amakn=="99"] <- "99"
以下是我的数据示例:
df <- read.table(text=
"Hispanic amakn asian blkaa nhopi white utod
1 1 0 0 0 0 1 0
2 2 99 99 1 99 99 99
3 99 99 99 99 99 99 99
4 3 99 99 99 99 99 99
5 0 99 99 99 99 99 99
6 99 99 99 99 99 99 99
7 3 99 99 99 99 99 99
8 0 99 99 99 99 99 99
9 2 0 0 0 0 1 0
10 2 0 0 0 0 1 0
11 2 0 0 0 0 1 0
12 1 0 0 0 0 1 0
13 0 99 99 99 99 99 99
14 2 0 0 0 0 1 0
15 0 99 99 99 99 99 99
16 2 0 0 0 0 1 0
17 2 0 0 1 0 0 0
18 0 0 0 0 0 0 0
19 99 99 99 99 99 99 99
20 1 99 99 99 99 99 99
21 0 99 99 99 99 99 99
22 2 0 0 0 0 1 0
23 2 0 0 0 0 1 0
24 2 0 0 1 0 0 0
25 0 99 99 99 99 99 99
26 99 0 0 0 0 1 0
27 0 99 99 99 99 99 99
28 99 0 0 0 0 1 0
29 1 99 99 99 99 99 99
30 99 99 99 99 99 99 99
31 2 0 0 0 0 1 0
32 2 0 0 0 0 1 0
33 3 0 1 0 0 0 0
34 2 99 99 99 99 1 99
35 2 0 0 0 0 1 0
36 1 99 99 99 99 99 99
37 0 99 99 99 99 99 99
38 2 0 0 0 0 1 0
39 99 99 99 99 99 99 99
40 1 99 99 99 99 99 99
", header=TRUE)
答案 0 :(得分:2)
我建议将遗失代码编码为NA
,这样会使生活更轻松。
d_a[] <- lapply(d_a, function(x) {x[x %in% 99] <- NA;x})
d_a$Hispanic[d_a$Hispanic %in% 0] <- NA
然后,使用within
,我们一个接一个地浏览选项。
mis
来标识所有行
竞赛变量为NA
。p1raceeth
变量与所有NA
一起使用。Hispanic
不是NA
和rowSums
的其他变量
我们将"unknown"
设置为零。Hispanic
是1
且其他不在mis
中的地方,我们有
"Hispanic any race"
。 Hispanic
或2
中的3
。"White"
,其中white
在1
,"Black"
中
1
的种族变量,我们可能希望将p1raceeth
设置为NA
(或其他),在{没有rowSums
的{1}}大于"Hispanic"
。1
设置为NA
,但我不这样做
建议这样做,因为它会删除它的信息
"missing"
,所以我已将其注释掉。)NA
保留了rm
变量,以使其不出现在结果中。
mis
通知,我在这里使用的是res <- within(d_a, {
mis <- apply(d_a[-1], 1, function(x) all(is.na(x)))
p1raceeth <- NA
p1raceeth[is.na(Hispanic) & rowSums(d_a[-1]) %in% 0] <- "unknown"
p1raceeth[Hispanic %in% 1 & !mis] <- "Hispanic any race"
p1raceeth[Hispanic %in% 2:3 & !mis] <- "Other"
p1raceeth[Hispanic %in% 2 & white %in% 1] <- "White"
p1raceeth[Hispanic %in% 2 & blkaa %in% 1] <- "Black"
p1raceeth[rowSums(d_a[-1], na.rm=T) > 1] <- NA
# p1raceeth[is.na(p1raceeth)] <- "missing"
rm(mis)
})
而不是%in%
。这很重要,因为==
偶尔会产生==
,而我们在这里不想要,而NA
不会。
如果您需要'factor'变量,则可以选择现在作为最后一步:
%in%
我显示res$p1raceeth <- as.factor(res$p1raceeth)
的唯一行,按res
排序。
Hispanic
答案 1 :(得分:-1)
也许,您可以使用 def count_upper_letters(str)
"""Count upper letters in a string.
Input str is a string.
Finish this function which counts the number of upper letters in a
string.
You should do this in a while loop
This function returns the number of upper letters in the string as an
integer.
"""
counter=0
while counter == str:
if str.upper:
counter = counter +1
return counter
#test for Q2
print(count_upper_letters(''' Casablanca is a 1942 American romantic drama
film directed by Michael Curtiz and based on Murray Burnett and Joan Alison's
unproduced stage play Everybody Comes to Rick's
print(count_upper_letters(""))
/ ifelse
并使用case_when
组合条件:
%in%